因此,单元测试的目标之一是确保将来的更改/重构不会破坏现有功能。假设我们有以下方法:
public bool LessThanFive(double a) {
return a < 5;
}
进行uni测试的一种方法如下:
public bool LessThanFiveTests_True() {
const double a = 4;
Assert.IsTrue(LessThanFive(a))
}
此单元测试的问题在于,如果以后有人用<
方法将<=
更改为LessThanFive
,则测试将通过。
如果我们拥有DateTime
而不是double
呢?
答案 0 :(得分:1)
您的假设似乎是您编写了一个测试,并且该测试捕获了所有可能的错误。相反的情况更接近于事实:对于每个潜在的错误,您都需要进行一次测试才能发现它。当然,在实践中,很多测试都会捕获许多潜在的错误,但是我有点夸张地传达了这个想法。
因此,要捕获<
变成<=
的潜在错误,您需要第二个测试用例,尝试用5
进行功能。顺便说一句,顺便说一句。所谓的边界测试,边界测试是一种导出一组有用的测试用例的众所周知的方法。
还有更多的测试设计技术,例如,等效类划分,分类树,基于覆盖率的测试等。这些方法的基本目标是指导您开发测试套件,理想情况下,针对每个潜在的bug进行相应的测试存在可以检测到该错误的情况。