如果正确实施逻辑后,测试仍然失败(因为测试中有错误),则TDD中的最佳措施是什么?
例如,假设您要开发以下功能:
int add(int a, int b) {
    return a + b;
}
假设我们按照以下步骤进行开发:
- 编写测试(尚无功能): - // test1 Assert.assertEquals(5, add(2, 3));- 导致编译错误。 
- 编写一个虚拟函数实现: - int add(int a, int b) { return 5; }- 结果: - test1通过。
- 添加另一个测试用例: - // test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));- 结果: - test2失败,- test1仍然通过。
- 编写实际的实现: - int add(int a, int b) { return a + b; }- 结果: - test1仍然通过,- test2仍然失败(因为- 11 != 12)。
在这种特定情况下:
- 更正test2,看看它现在通过了,或者
- 删除实现的新部分(即返回上面的步骤2),更正test2并使其失败,然后重新引入正确的实现(上面的步骤4)。
还是还有其他更聪明的方法?
虽然我知道示例问题相当琐碎,但我对通用情况下的操作很感兴趣,这可能比两个数的加法复杂。
编辑(响应@Thomas Junk的回答):
这个问题的重点是在这种情况下TDD提出的建议,而不是实现良好代码或测试(可能与TDD方式不同)的“通用最佳实践”。