Java 为什么JUnit不执行整个方法?

Java 为什么JUnit不执行整个方法?,java,junit,Java,Junit,为什么第二个断言从未执行过。我的意思是Assert不会抛出异常。那么为什么这个方法会被打断呢。它也没有返回值 @Test public void testReverse2() { Assert.assertEquals(1.0, 2.0,0); Assert.assertEquals(4.0, 5.0,0); } 实际上,assertEquals在失败时确实会抛出异常。在您的情况下,它将始终失败,因为您将1.0与2.0与0.0的增量进行比较。因此,它将始终抛

为什么第二个断言从未执行过。我的意思是Assert不会抛出异常。那么为什么这个方法会被打断呢。它也没有返回值

 @Test
 public void testReverse2()
 {   
     Assert.assertEquals(1.0, 2.0,0);

     Assert.assertEquals(4.0, 5.0,0);
 }

实际上,
assertEquals
在失败时确实会抛出异常。在您的情况下,它将始终失败,因为您将
1.0
2.0
0.0
的增量进行比较。因此,它将始终抛出断言错误,并且永远不会执行第二次检查。

根据文档,如果不相等,它将中断,如果您想执行整个断言,则可以使用
ErrorCollector

注:equalTo在org.hamcrest.CoreMatchers中,来自
hamcrest

public class TargetTest {

    @Rule
    public ErrorCollector collector = new ErrorCollector();

    @Test
    public void testReverse2() {   
        collector.checkThat(1.0, equalTo(2.0));
        collector.checkThat(4.0, equalTo(5.0));
    }
}

您的假设(“断言不抛出异常”)是错误的。第一个
Assert.assertEquals
在断言未满足时引发异常第一个Assert将引发异常,因此第二个将永远不会执行。好的,谢谢。因此它停止执行,因为抛出了异常。好啊这就是我想要的解释。但它似乎是一个运行时异常,因为它没有被检查。@Josephine不,这是一个错误,一个断言错误。错误也会被取消选中。