我不明白如何在以下代码中遵守TDD FIRST principle。
以下是关于FIRST原则的说明:
- 快速:快速运行(子集)测试(因为您将一直运行它们)
- 独立:没有测试依赖于其他测试,因此可以按任何顺序运行任何子集
- 可重复:运行N次,得到相同的结果(以帮助隔离错误并启用自动化)
- 自检:测试可以自动检测是否通过(没有人工检查输出)
- 及时:与被测代码同时写入(使用TDD,先写!)
测验问题:
莎莉希望她的网站在每个月的第一个星期二有特别的布局。她有以下控制器和测试代码:
# HomeController def index if Time.now.tuesday? render 'special_index' else render 'index' end end # HomeControllerSpec it "should render special template on Tuesdays" do get 'index' if Time.now.tuesday? response.should render_template('special_index') else response.should render_template('index') end end
没有遵循什么第一原则?
- 快速
- 独立
- 重复
- 自检
- 及时
我不确定哪个FIRST原则没有被遵守:
'special_index'
如果是星期二,'index'
,如果它不是星期二。我在测验中选择了Timely,因为测试代码是在控制器代码之后呈现的。但我提出的问题是错误的,回想起来,这不是一个好的选择。我不确定这里没有遵循哪个FIRST原则。
这不是Repeatable
,因为星期二不是每天都有:)如果你在星期一进行这个测试你会得到一个结果,如果你在星期二运行它,另一个。
独立和可重复
它不是独立于日期,然后它可以运行重复,但从技术上讲,你会得到相同的结果,因为你选择
对HomeController进行FIRST概念测试的正确方法是改变评估阶段之前的时间
是的,混淆部分原因是F.I.R.S.T.关于“我”的原则不够完整或简明。在我参加的课程中,该原则被称为F.I.I.R.S.T.
第二个“我”代表“孤立”。上述测试独立于其他测试,但不在单独的类或项目中隔离。
[更新]:
隔离可能意味着:
独立意味着:
结论:在这种解释中,“隔离”一词更强调物理位置,这在某种程度上通常意味着逻辑独立性(例如,类级隔离)。
声称可能更具强调性和含义的完整性。
另见这里的评论。
但是(好的)单元测试还有更多属性:Roy Osherove在他的“单元测试艺术”一书中找到了更多的属性,我在F.I.I.R.S.T中找不到。原则(link to his book site),这里引用我自己的话(和首字母缩略词):
鉴于所有这些特定点,应该比以前更清楚,编写(好)单元测试几乎都很简单。