TDD中的黄色

时间:2011-05-22 01:29:55

标签: unit-testing testing tdd

我刚刚开始使用TDD,它似乎对我的情况非常有帮助。困扰我的唯一一件事就是我没有看到将你的测试标记为“待实施”的方法。当我开发一个应用程序时,我有时会提出新的测试,将来我将完成当前的更改,因此我编写这些测试,当然它们会失败,因为还没有这样的功能。但是因为我不打算“修理”它们直到我完成当前部分我希望看到类似黄色状态(红色和绿色之间)的东西,因为我想获得仅用于破损测试的红色并且能够标记TODO用另一种颜色测试。有什么练习可以帮助我吗?我可以将这样的测试编写到某种列表中,但在这种情况下,它将是双重工作,因为我将在第一次用单词然后在代码中说同样的内容。

编辑:我刚刚发现在Perl标准单元框架中有todo测试,也许在Java中有类似的东西?

4 个答案:

答案 0 :(得分:2)

例如,MSTest和NUnit都支持Inconclusive状态,但是它取决于你的Test Runner是否在UI中显示为黄色。 JUnit也可能支持不确定性。

在Kent Beck的TDD示例中,他建议写一个测试列表,写在记事本上,也就是“测试列表”。然后,您一次只能处理一个测试,并按照对您有意义的顺序在列表中前进。这是一个很好的方法,因为您可能会意识到在完成测试后,您的列表上的某些测试可能是不必要的。实际上,您只需编写所需的测试(和代码)。

要执行您的建议,您可以在代码中编写测试列表,并使用所有常规属性相应地命名测试方法,但每个测试的正文将是“Assert.Inconclusive()”

我过去做过这个,但我的测试体是“Assert.Fail()”。这是你如何工作的问题 - 在所有测试通过之前我不会检查我的更改。由于声明不确定与声明失败不同,它可以用作检查代码以分享更改的方法,而不会破坏整个团队的构建(取决于您的构建服务器配置和商定的团队流程)。

答案 1 :(得分:1)

TDD的目的是首先编写测试,然后继续编码,直到所有测试都填写完毕。进行黄色测试可能有助于您自己组织,但是,TDD对此失去了一些清晰度。

答案 2 :(得分:1)

在JUnit中,您可以在测试中使用@Ignore注释,让框架在运行期间跳过它。假设您有一个测试列表,您可以按如下方式将它们放入测试中:

@Ignore @Test public void somethingShouldHappenUnderThisCircumstance() {}

@Ignore @Test public void somethingShouldHappenUnderThatCircumstance() {}

当然,如果你不首先将它们标记为测试,则不需要忽略。诸如IntelliJ之类的IDE将标记被忽略的测试,以便它们更好地脱颖而出。

答案 3 :(得分:0)

完全没问题 - 只要你不打破你的思路去实施这些新的测试。你可以在你的“测试列表”中记下这张纸,或者用空白的测试存根写好名字并用Ignore(“Impl pending”)属性标记它们。

NUnit GUI将忽略的测试显示为黄色..所以JUnit很有可能做同样的事情。您需要相应的Ignore annotation来装饰您的测试