【发布时间】:2014-10-20 07:23:25
【问题描述】:
在进行 TDD 时,我担心测试的“诚实”。 TDD 是
- 写红色测试
- 编写足够的代码使其变为绿色
- 重构,让测试变绿
到目前为止一切顺利。现在这里是一个应用上述原理的例子,这种例子在教程和现实生活中已经遇到过:
我想检查当前用户的电子邮件是否显示在我的 webapp 的默认页面上。
- 编写红色测试:“example@user.com”显示在 default_page.html 中
- 编写足够的代码使其变为绿色:在 default_page.html 中硬编码“example@user.com”
- 通过实现 get_current_user()、其他层中的一些其他代码等进行重构,让测试变为绿色。
我对第 2 步感到“震惊”。这里出了点问题:即使没有实际工作,测试也是绿色的。这里有一种测试气味,这意味着也许在某些时候有人可以在不破坏测试套件的情况下破坏生产代码。
我在这里缺少什么?
【问题讨论】:
-
是什么让您认为将文本硬编码到页面上符合“编写足够的代码使其变为绿色”的条件?当然,它确实具有测试测试有效的好处。
-
@T.J.Crowder 因为不幸的是,这是著名的 TDD 书籍所支持的那种废话。
-
@OliverCharlesworth:嗯,正如我所说,它有测试测试的好处,这是一件至关重要的事情......
-
这是真的:这三个步骤并不包含所有的软件开发。它们只是路标。是的,您可以按照描述对它们进行游戏,就像您可以玩任何“三步过程”一样。不过,不要那样做,你会没事的。如果您真的担心其他人会担心,您可以让测试为每次运行随机生成一个不同的电子邮件地址。
-
@T.J.Crowder 我不同意“测试测试”。测试同时测试自身和被测对象。
标签: unit-testing testing tdd atdd