TDD疑问:为测试用例编写测试是否值得投入精力?
关于测试用例自身bug的TDD疑问解答
首先明确:给测试用例写测试不是TDD的常规操作,但这个顾虑绝非新手专属——哪怕是有经验的开发者,也会遇到测试逻辑疏漏的情况。
为什么测试用例会出问题?
不管是新手还是老手,都可能写出有bug的测试:
- 对需求理解偏差,导致测试验证的不是正确的业务逻辑
- 边界条件、异常场景考虑不全,测试覆盖有漏洞
- 测试代码里的逻辑错误(比如断言写错、数据准备错误)
要不要给测试用例写测试?分场景看:
绝大多数日常开发场景:不值得
TDD的红-green-refactor流程本身就是对测试的间接验证:- 先写失败的测试(红):确认测试能识别出“不符合预期的代码”
- 编写业务代码让测试通过(绿):确认测试能识别“符合预期的代码”
这个过程里,如果你写的测试本身有bug(比如断言1+1=3),那你写业务代码的时候要么发现测试永远红(逻辑错得离谱),要么写完代码发现测试过了但业务逻辑明显不对,这时候自然会修正测试。额外给测试写测试只会增加维护成本,完全没必要。
特殊复杂场景:值得
如果你的测试代码本身包含复杂的逻辑(不是简单的断言),比如:- 自定义的通用断言库、测试工具类
- 跨多个模块的集成测试逻辑,需要处理复杂的数据准备或状态校验
这类测试代码本身就是“生产级代码”,有出错的风险,这时候给它们写测试是合理的——比如你封装了一个assertOrderIsValid(order)方法,里面包含了订单金额、状态、用户权限等多维度的校验逻辑,那你必须测试这个方法本身是否能正确判断订单的有效性,否则用它去测业务代码只会带来错误的结论。
新手的应对建议
不用纠结给测试写测试,先把TDD的基础流程做扎实:
- 写小而聚焦的测试,每次只验证一个功能点
- 严格执行红-green-refactor:先确保测试会失败,再写业务代码
- 写完测试通过后,多做反向验证:故意把业务代码改坏,看测试是否会失败,以此确认测试的有效性
内容的提问来源于stack exchange,提问作者Łukasz Jasiński
相关产品推荐
相关产品推荐

