在assertEquals之后不要停止测试

时间:2011-10-07 18:04:35

标签: java unit-testing junit

我正在尝试调试具有assertEquals JUnit测试的失败测试。我希望在assertEquals语句失败后的一段时间内看到应用程序的行为。现在,eClipse在语句失败后立即停止测试。有没有办法让测试在失败后稍微睡一觉?感谢。

6 个答案:

答案 0 :(得分:2)

当你说“应用程序在一定时间内的行为”时,你在谈论不同(非测试)线程中的行为,对吧?我将断言条件提取到变量中,在实际的断言行上放置一个断点,然后在调试器中运行测试:

@Test
public void testSomeMethod() {
    assertEquals(true, testInstance.someMethod());
}

变为

@Test
public void testSomeMethod() {
    boolean result = testInstance.someMethod();
    /* breakpoint goes here */ assertEquals(true, result);
}

答案 1 :(得分:1)

最简单的方法就是注释掉这条线。

一旦断言失败,单个测试就会失败,原因是你在首次失败后如何信任任何结果?

你说

 I'd like to see the behavior of the application for a certain amount of time after the assertEquals statement fails

我不明白这个说法。您是否正在使用junit断言运行应用程序,或者您正在运行一套单元测试?此外,如果断言失败,您为什么要继续?听起来你的测试设计需要更多的工作 - 断言失败意味着情况是一个失败的时期。如果您想查看失败后会发生什么,那么您应该在断言中添加更多详细信息,并且只在您不想继续时才会失败。

答案 2 :(得分:1)

不是真的。在幕后,当断言失败时,JUnit框架会抛出异常。 Eclipse捕获此异常并将给定测试标记为失败。所以你问:是否有可能抑制抛出的异常并继续执行

JUnit在这里不会帮到你。您可以使用自己的包装器替换JUnit断言,这些包装器不会抛出异常(或者在测试结束时抛出)。当然,您也可以注释掉测试失败。但是没有内置的解决方案。

答案 3 :(得分:1)

assertEquals抛出一个AssertionError,所以你需要找到一种方法来对该异常作出反应。

您可能有IDE在发生异常或错误时添加断点。如果是,则为AssertionError添加一个。

如果没有,那么你可以在assertEquals周围添加一个try catch,并在catch块中添加一个断点。

答案 4 :(得分:0)

理想情况下,您的测试每个测试应该只有一个断言,并且您的测试应该一次只能覆盖一个特定的功能。

如果您有多个测试,那么很可能您的其他资产在第一次失败时失败,因此没有其他测试的价值。

但是如果你还想继续做好,那么你可以建立自己的断言库,在那里创建自己的apis并将结果存储在某处,然后打印出错误。不太接近java所以不确定如何编码。

答案 5 :(得分:-2)

通常,您的单元测试应该只有一个断言;他们正在测试的一件事。除了断言之外,有两个测试具有完全相同的代码并不合理,即“当这个运行时,这两个事情都应该是真的”是两个测试。

值得注意的是,如果你真正想要的附加代码(通过断言)是为了帮助你确定测试失败的原因,那么考虑一下流行的printf-debugging。您可以在断言之前向测试添加一些输出,以便让您了解事物的状态。测试工作后,您可以随时将其拉回来。