【问题标题】:How to kill a JUnit test run in Eclipse that has entered an infinte loop如何在 Eclipse 中终止已进入无限循环的 JUnit 测试运行
【发布时间】:2013-08-05 11:22:05
【问题描述】:

我有一些 Java 代码,我正在使用 JUnit 进行单元测试,在 Eclipse (Neon) 中运行。碰巧某些被测代码中存在错误,导致它进入无限循环。然后,JUnit 运行当然不会完成。如何终止测试运行?

停止测试运​​行的按钮(“Stop JUnit Test Run”)不能正常工作:GUI 似乎认为它已经停止了测试运行,但是查看 CPU 活动(使用top,对于例如),表明一个 Java 线程仍在运行。我可以通过发送终止信号来自己终止线程。但这似乎是一个杂项,而且很不方便。 Eclipse 本身有没有更好的方法?

【问题讨论】:

    标签: eclipse junit infinite-loop


    【解决方案1】:

    使用红色按钮从控制台视图中杀死它。这将停止该过程。

    从 junit 视图中停止它只会要求它停止。

    【讨论】:

      【解决方案2】:

      您可以使用 JUnit 处理此类事情,方法是在 @Test 注释。例如:

      // Simple test-case which will always fail with time-out
      @Test(timeout = 1000 * 60) throws Exception // 60 seconds 
      public void testSomething() {
          for (int i = 0; i < 100; i++) {  // 100 seconds
              Thread.sleep(1000);
          }
      }
      

      如果您的测试方法没有按时完成, 然后 JUnit 将中断它并报告测试失败。 对于上面的示例,它将是:

      java.lang.Exception: test timed out after 60000 milliseconds
          at java.lang.Thread.sleep(Native Method)
          at my.package.Test1.testSomething(Test1.java:12)
      

      【讨论】:

      • 如果您预计某个特定测试的失败可能会导致无限循环,这很有用。如果您没有充分的理由怀疑这一点,或者随后尝试的重构引入了无限循环,那么它就不那么有用了。
      • @Raedwald 好吧,即使我这样做 有任何理由期待无限循环。
      • 我认为将其添加到 每个 测试是代码异味。
      • @Raedwald 确实,它看起来很臭。更好的方法是设置默认超时,如 answer to "Set JUnit timeout in eclipse" 中所述。
      【解决方案3】:

      首先,试试 Matthew Farwell 的回答。如果这不起作用,那么您必须转到正在运行的进程(Windows 上的 ctrl+shift+esc,然后是进程选项卡)并选择java.exe 任务,然后结束进程。如果您需要杀死 Eclipse,请联系 javaw.exe

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-30
        • 2013-01-24
        • 2021-09-10
        • 2019-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多