假设我们有一个用伪语言定义的简单函数。
List<Numbers> SortNumbers(List<Numbers> unsorted, bool ascending);
我们传入一个未排序的数字列表和一个 bool 值,指定升序或降序排序。作为返回,我们得到一个排序的数字列表。
以我的经验,有些人比其他人更擅长捕捉边界条件。问题是,“您怎么知道何时'完成'捕获测试用例”?
我们现在可以开始列出案例了,某些聪明的人无疑会想到以前的任何一个案例都没有涵盖的“另一个”案例。
最佳答案
不要浪费太多时间试图考虑每个边界条件。您的测试将无法在第一时间捕获每个错误。这个想法是要进行非常好的测试,然后每次出现错误时,都专门为该错误编写一个新的测试,这样您就永远不会再听到它了。
我想就代码覆盖率工具做另外一个说明。在像C#或Java这样的语言中,您有许多get/set和类似的方法,因此您应该而不是拍摄100%的覆盖率。这意味着您浪费了太多时间来编写琐碎的代码测试。您只希望100%覆盖复杂的业务逻辑。如果您的完整代码库覆盖率接近70-80%,则说明您做得很好。如果您的代码覆盖率工具允许多个覆盖率指标,那么最好的一种就是“块覆盖率”,它衡量“基本块”的覆盖率。其他类型是类和方法覆盖率(不会给您太多信息)和行覆盖率(太细粒度)。
关于unit-testing - 严格捕获用于单元测试的测试用例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12569/