我的单元测试现有方法是否会失败?

时间:2013-12-31 18:34:42

标签: unit-testing

在TDD或BDD中,我们从单元测试失败开始,然后修复测试中的方法以让单元测试通过。

通常,在新工作中,我们需要为现有方法编写单元测试。可能不是一个好的做法,但这确实发生了。这就是我现在的情况。

所以,这是我的问题:我是否应该让现有方法的单元测试失败?谢谢。

2 个答案:

答案 0 :(得分:6)

当您为工作代码添加单元测试时,您不会处理TDD。但是,在第一次编写测试时使测试失败仍然是一个好主意(例如,在极其简单的情况下,如果实际输出为abc,则编写测试以期望{{1} })因此,当输出与预期的测试结果不同时,您就知道测试确实失败了。一旦你证明测试失败了,你可以通过修复预期的输出来使它们通过。

最糟糕的情况是将单元测试添加到第一次编写时通过的工作代码。然后你修改代码,改变输出,单元测试仍然通过 - 当他们不应该。因此,请确保您的新单元测试确实检测到问题 - 这实际上意味着编写它们以便它们首先失败(但这可能意味着您必须使用已知的伪造预期结果编写它们)。

答案 1 :(得分:2)

不,你不应该试图让你的测试失败。

为什么TDD首先使测试失败?

第一个原因是确保您真正在代码之前编写测试。如果您编写测试并立即通过,则在测试之前编写代码。我们编写失败的测试以确保我们确实首先编写测试。在你的情况下,为时已晚,所以这个原因不适用。

第二个原因是验证测试是否正确。测试的危险在于它不会测试您认为的功能。由于正确的原因使测试失败,可以确信测试确实有效。但是,由于正确的原因,您无法使测试失败。代码有效,测试应该检测商品是否正常工作。因此,没有办法编写实际上因正确原因而失败的测试。

正如另一个答案建议的那样,您可以编写错误的测试代码,观察是否失败然后更正它。但是因为测试错误而失败了,它并没有真正表明您的测试正确捕获了实际错误。充其量它确实表明你的断言有效。但一般来说,我们对断言的工作非常有信心,而且我们不需要不断地重新测试断言函数。

当您将测试添加到已经正常工作的代码时,我不认为您通过尝试使测试失败而获得更多收益。所以我不会这样做。