Lets说我用一个更简单的实现替换了一个过于复杂的方法,我相信它也会做同样的事情。
使用我的单元测试将旧代码复制到类中是否有意义,这样我可以断言两者的结果是一样的吗?
由于
答案 0 :(得分:5)
是。这是一个很好的入门方式。
但不要就此止步。
还要编写一个测试,其中包含旧代码用于生成的“最终答案”。
在某些时候,您会希望从单元测试中删除旧代码,因为它错误且无法维护。
答案 1 :(得分:4)
假设你正在使用源代码控制,这就是我要做的事情:
作为第1步的一部分,可能想为旧代码编写一些“线束”,这样如果您的主要目标只是保留现有行为,就可以看到它吐出的值。重要的是你有测试传递旧的实现。
步骤3的原因是,如果您发现错过了重要案例,则可以根据旧代码同步到提交测试的更改,添加新测试,验证其是否有效,然后重新同步到并确认它仍然有效(必要时修复新的实施)。
答案 2 :(得分:2)
绝对不是。您应该进行测试以涵盖旧代码处理的每种情况,边界条件,错误等。如果你的测试是好的,那么当测试通过时你的新代码是等效的。
能够自信地重构和消除旧代码是单元测试的主要优势之一。
答案 3 :(得分:2)
是有意义的
并确保旧代码在重写之前传递它们
然后用新代码替换旧代码,并确保它通过相同的测试
答案 4 :(得分:1)
您还可以使测试断言两个方法返回相同的值。像
这样的东西Assert.equals(oldMethod(someInput), newMethod(someInput));
然后你可以慢慢地从旧方法中“释放自己”。