使用旧代码验证单元测试中的结果

时间:2009-07-30 20:40:25

标签: unit-testing testing refactoring tdd

Lets说我用一个更简单的实现替换了一个过于复杂的方法,我相信它也会做同样的事情。

使用我的单元测试将旧代码复制到类中是否有意义,这样我可以断言两者的结果是一样的吗?

由于

5 个答案:

答案 0 :(得分:5)

是。这是一个很好的入门方式。

但不要就此止步。

还要编写一个测试,其中包含旧代码用于生成的“最终答案”。

在某些时候,您会希望从单元测试中删除旧代码,因为它错误且无法维护。

答案 1 :(得分:4)

假设你正在使用源代码控制,这就是我要做的事情:

  1. 编写旧代码的测试。
  2. 确保测试通过。
  3. 检查是否有来源控制。
  4. 现在,作为一个         单独更改,更换         实现(即:添加新的         实施和删除旧的         实施)并确保         测试仍然通过。
  5. 作为第1步的一部分,可能想为旧代码编写一些“线束”,这样如果您的主要目标只是保留现有行为,就可以看到它吐出的值。重要的是你有测试传递旧的实现。

    步骤3的原因是,如果您发现错过了重要案例,则可以根据旧代码同步到提交测试的更改,添加新测试,验证其是否有效,然后重新同步到并确认它仍然有效(必要时修复新的实施)。

答案 2 :(得分:2)

绝对不是。您应该进行测试以涵盖旧代码处理的每种情况,边界条件,错误等。如果你的测试是好的,那么当测试通过时你的新代码是等效的。

能够自信地重构和消除旧代码是单元测试的主要优势之一。

答案 3 :(得分:2)

是有意义的

首先编写测试

并确保旧代码在重写之前传递它们

然后用新代码替换旧代码,并确保它通过相同的测试

答案 4 :(得分:1)

您还可以使测试断言两个方法返回相同的值。像

这样的东西
Assert.equals(oldMethod(someInput), newMethod(someInput));

然后你可以慢慢地从旧方法中“释放自己”。