• Fizz-Buzz-Whizz


    Fizz-Buzz-Whizz  

    ThoughtWorks测试

    问题描述:

    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类添加如下方法:

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

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

       

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

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

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

    浮沙之上勿筑高台
  • 相关阅读:
    c 中有关打印*,字符的题目集
    c 求两个整数的最大公约数和最小公倍数
    cygwin中vim的使用方法
    window下如何搭建linux环境
    ORA-00923: 未找到要求的 FROM 关键字
    c# datagridviewcomboboxcell值无效的解决办法
    sql substring charindex
    C# 中datagridview行里面有三个cheeckbox,要控制成三选一。
    程序中使用事务来管理sql语句的执行,执行失败时,可以达到回滚的要求。
    WinForm界面中快捷键设置
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4908795.html
Copyright © 2020-2023  润新知