有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java删除或注释掉不工作的JUnit测试?

我目前正在为遗留应用程序构建CI构建脚本。有零星的JUnit测试可用,我将把所有测试的JUnit执行集成到CI构建中。然而,我想知道如何处理在未维护的JUnit测试中遇到的100%的失败。我是否:

1)注释它们,因为它们似乎有合理的(如果没有维护的话)业务逻辑,希望有人最终取消注释并修复它们

2)删除它们,因为不太可能有人修复它们,被注释掉的代码只会被忽略或永远杂乱无章

3)找到那些把这堆乱七八糟的东西留在我手里的人,并用打印出来的代码(由于方法的气味很长,足以胜任这项任务),同时宣传维护良好、经过单元测试的代码库的好处


共 (6) 个答案

  1. # 1 楼答案

    你现在绝对应该以某种方式禁用它们。无论是通过评论、删除(假设您可以从源代码管理中获得它们)还是其他方式来实现,都取决于您。您不希望这些失败的测试成为人们提交新更改的障碍

    如果你觉得自己能解决的问题太少了,那就去做吧。如果它们太多,那么我倾向于使用“众包”方法。为每个失败的测试提交一个bug。如果可能的话,尝试将这些bug分配给测试/测试代码的实际所有者/作者,但如果这太难确定,那么只要你告诉人们重新分配错误分配给他们的bug,那么随机选择就可以了。然后鼓励人们通过给他们一个最后期限或者定期通知每个人进度并鼓励他们修复所有的bug来修复这些bug

  2. # 2 楼答案

    遵循no broken window原则,采取行动解决问题。如果无法修复测试,至少:

    1. 在单元测试中忽略它们(有不同的方法)
    2. 根据需要输入尽可能多的问题,并指派人员修复测试

    然后,为了防止将来发生这种情况,安装一个类似于Hudson Game Plugin的插件。人们在持续整合过程中获得分配的分数,例如

    • -10破坏建筑<;——更糟
    • -1.考试失败
    • +1.修改测试
    • 等等

    这是一个非常酷的工具,可以在团队中创建关于单元测试的责任感

  3. # 3 楼答案

    失败的JUnit测试表明

    1. 测试中的源代码已经在没有维护测试的情况下运行。在这种情况下,选项3绝对值得考虑,或者
    2. 你真的失败了

    无论哪种方式,您都需要修复/查看测试/源代码。因为听起来你的工作是创建CI系统,而不是修复测试,所以在你的位置上,我会在测试中留下一个定时炸弹。您可以使用JUnit 4(类似@IgnoreUntil(date="2010/09/16"))和自定义运行程序的带注释方法,或者只需在每个测试的第一行添加一个if语句:

      if (isBeforeTimeBomb()) {
        return;
      }
    

    其中isBeforeTimeBomb()可以简单地根据您选择的未来日期检查当前日期。然后,您按照这里其他人给出的建议,通知您的开发团队,构建现在是绿色的,但除非修复了时间炸弹测试,否则可能会在X天内爆炸

  4. # 4 楼答案

    如果使用JUnit4,可以用@Ignore annotation注释测试

    如果使用JUnit 3,您可以重命名测试,这样它们就不会以test开头

    此外,尝试修复正在修改的功能的测试,以避免代码变得更混乱

  5. # 5 楼答案

    如果它们编译失败:把它们留在内存中。这将使您在使用CI时了解测试改进的良好历史。如果测试没有编译,但破坏了构建,请将它们注释掉,并敦促开发人员修复它们

    这显然不排除使用选项3(击中他们的头部),无论如何,你都应该这样做,不管你对测试做了什么

  6. # 6 楼答案

    • 将其注释掉,以便以后可以修复
    • 生成测试覆盖率报告(例如Cobertura)。您注释掉的测试应该包含的方法将被指示为未包含在测试中