我被要求为我从java类中删除的代码创建单元测试(注意这不是API,所以我不需要弃用代码)。
假设您有一个如下所示的java类,并且您需要删除下面注释的一些代码:
public class foo extends foobar {
protected void doStuff() {
doMoreStuff();
// Everything below needs to be deleted, including the doStuffToo() method
Object o = null;
doStuffToo(o);
}
public void doMoreStuff() {
boolean a = true;
}
// this method needs to be deleted
public void doStuffToo(Object o) {
o = new Object();
}
}
我的意见是,你应该简单地删除被删除代码的测试用例,但是我被告知,我应该编写单元测试来检查旧代码的存在,以防将来出现错误的合并。
在上面的例子中,什么被认为是最佳实践?希望您已经为doStuff方法准备了单元测试。假设您这样做了,我将执行以下操作:
- 更新doStuff方法的测试,以反映新的逻辑应该做什么。
- 运行doStuff测试并验证它们是否失败。
- 删除被要求删除的应用程序代码。
- 重新运行doStuff测试并验证它们是否通过。
- 如果测试在步骤4中没有通过,则相应地分析和重构,直到它们通过。
- 删除测试已删除方法的测试(无论如何,您将从第3步收到编译器错误)。
我很想知道"检查旧代码是否存在"的单元测试能做什么,以及它们能提供什么好处。我知道如果留下这样的代码会发生什么。它会留在代码库中,变得多余,给新的团队成员造成混乱,直到几年后,一个明智的人决定删除它们。
无论如何,你的安全网是doStuff测试,它有望捕获任何合并问题。如果您的测试处于源代码控制之下(我希望如此!),那么您可以随时恢复到代码库的先前版本,以便在将来需要时检索已删除的测试。