zoukankan      html  css  js  c++  java
  • ThoughtWorks测试

    Fizz-Buzz-Whizz

    问题描述:

    1. 你首先说出三个不同的特殊数,要求必须是个位数,比如3、5、7。

    2. 让所有学生拍成一队,然后按顺序报数。

    3. 学生报数时,如果所报数字是第一个特殊数(3)的倍数,那么不能说该数字,而要说Fizz;如果所报数字是第二个特殊数(5)的倍数,那么要说Buzz;如果所报数字是第三个特殊数(7)的倍数,那么要说Whizz。

    4. 学生报数时,如果所报数字同时是两个特殊数的倍数情况下,也要特殊处理,比如第一个特殊数和第二个特殊数的倍数,那么不能说该数字,而是要说FizzBuzz, 以此类推。如果同时是三个特殊数的倍数,那么要说FizzBuzzWhizz。
    5. 学生报数时,如果所报数字包含了第一个特殊数,那么也不能说该数字,而是要说相应的单词,比如本例中第一个特殊数是3,那么要报13的同学应该说Fizz。如果数字中包含了第一个特殊数,那么忽略规则3和规则4,比如要报35的同学只报Fizz,不报BuzzWhizz。

    说明:以下为模仿Bob大叔的风格进行测试驱动的练习 

    我先考虑非特殊数字,要输出数字本身,那么我测试1,和2

    写这个测试用例的时候,注意到了"特殊数"的概念,而且是三个,那就先建立这个概念吧

    让编译器不再抱怨,然后需要可以开始报数了,我需要一个类,暂缺就叫FBW吧,报数呢,那就叫Shout吧

    我希望Shout的结果是"1",编译器在抱怨,找不到FBW,那就先解决编译器的抱怨吧,定义下面一个类

    编译,运行,通过!很有成就感阿。。。

    同样,下面的测试也顺利通过

    下面的测试3,按照规则3规则5都满足,而且都可以终结掉,但是考虑规则5的规则很强硬,只要包含有3,就必须说"Fizz",所以就用下面的用例来测试3

    目前编译器会抱怨,需要修改FBW类才能让测试顺利通过,这里我定义Rule5,这个规则用来告诉我两件事:1,返回什么字符串,2,是否可以被这个规则所终结,也就是说这个规则如果能处理完毕,就不需要后续处理,直接返回该字符串就行,所以引入了一个新的类,用来描述规则的处理结果:

    同时为FBW添加Rul5方法:

       

    编译,运行,通过,解决了数字3的测试,那么我要测试下面几个

       

    恩,运行通过,说明规则5目前看起来问题不大,碰到问题的时候再说吧。

    现在开始处理剩余的规则,简单分析后发现,规则3和规则4其实是一致的规则,规则4包含了规则3,所以合并一起处理吧,这个规则首先解决下面的测试:

    也就是说105号应该报"FizzBuzzWhizz",简单看下规则的实现,在FBW类添加如下方法:

    编译,运行,通过。。。。。。,感觉真好!

    再进行几个测试,心里有底一些

       

    同时别忘记一些边界上的数,测试看看

    运行,测试通过,感觉大功告成!

    这个代码满足了现在,而我也只关心现在,但是,为了练习技能,我要在后续版本中考虑各种需求变化过程下,如何进行重构!

  • 相关阅读:
    8月3日云栖精选夜读:LSF-SCNN:一种基于CNN的短文本表达模型及相似度计算的全新优化模型
    linux(centos)下安装PHP的PDO扩展
    Linux中find常见用法示例
    01 编译原理概述
    20145221 《信息安全系统设计基础》第5周学习总结
    20145221 《信息安全系统设计基础》第4周学习总结
    爱春秋之戏说春秋 Writeup
    20145221 《信息安全系统设计基础》第3周学习总结
    20145221 《信息安全系统设计基础》第2周学习总结
    20145221 《信息安全系统设计基础》第1周学习总结
  • 原文地址:https://www.cnblogs.com/stst/p/4908493.html
Copyright © 2011-2022 走看看