纠正错误时,鼓励我在这里工作,首先编写一个因给定错误而失败的测试,然后修复代码,直到测试通过。这遵循TDD惯例,应该被认为是很好的惯例,但是我注意到它往往会产生与实现非常接近的神秘测试。
例如,我们在发送作业,达到某个状态,中止并重试时遇到问题。为了重现此错误,编写了一个包含线程同步的大量测试,其中包含大量的模拟和其他东西。它确实可以完成工作,但是现在我正在重构代码,我发现删除此庞然大物非常诱人,因为要适应新设计,确实需要很多工作(再次)。它只是在单个特定情况下测试一个小功能。
因此,我的问题是:如何测试难以重现的错误?您如何避免创建测试实现的东西,并损害重构和可读性?