最近我被这个打击了。我什么时候应该感到我的单元测试已经完成?也就是说,在进行单元测试时,您对完成的定义是什么?与代码覆盖范围(功能覆盖范围,语句覆盖范围,分支覆盖范围,条件覆盖范围)可以相同吗?
您无法测试所有可能的情况,但是鉴于这是一个哲学问题,我认为我应该在此处发布。
答案 0 :(得分:0)
我的方法是牢记单元测试用于发现某些类型的错误。一旦您有足够的信心确定单元测试可以捕获所有这些错误,就可以完成。您所需要的置信度可能会根据被测系统的不同而有所不同,甚至可能需要其他技术,例如形式证明等。
有一些系统的方法可以帮助您导出测试用例,尤其是目标是查找可能存在的错误,例如边界测试(有助于发现许多误码)或等效划分。
覆盖率分析可以帮助您确定您错过的运行时场景(及其相应的潜在错误)-但出于某些原因,达到一定覆盖率可能不是一个有用的目标:
并不是每个错误都可以或应该在单元测试中找到。例如,对于内存泄漏,您宁可使用内存检查器。对于越界访问,可以使用静态分析或内存检查器。对于测试与其他组件或硬件的交互,您宁愿进行集成测试:集成测试应覆盖仅处理交互的代码,而单元测试则不一定。
可以确定某些错误不太可能花费您的时间来为它们创建测试。请记住,您每个小时的时间只能花费一次,因此您应该执行发现错误可能性最高的操作。因此,与为琐碎的getter和setter编写测试用例相比,运行静态分析并使用结果可以更好地利用您的时间-尽管这是增加测试覆盖率的简单方法...