繁体   English   中英

期望与断言 JUnit 或其他 Java package

[英]Expect vs Assert in JUnit or other Java package

我是一个 C++-er,正在做一些 Java。 在 C++ 广泛使用的gtest package 中,期望和断言之间存在区别:

 EXPECT_EQ(4, 2); // will ultimately cause test failure but test continues to run
 ASSERT_EQ(4, 2); // test will stop here and fail

如果测试失败,Assert 将停止测试。 期望不会停止测试。 如果未满足期望,则测试将失败。 不同之处在于,我们可以在一次测试运行中看到一段代码中有多少期望没有得到满足。

这在 Java 中是否等效? 我目前正在使用 JUnit 并看到到处都在使用断言:

Assert.assertEquals(4, 2); // just like C++, this stops the show

这很好,但问题是你看不到一次测试中有多少失败!

对于 JUnit 4,您可以使用 JUnit 的ErrorCollector ,如下所示:

public class TestClass {
    @Rule
    public ErrorCollector collector = new ErrorCollector();

    @Test
    public void test() {
        collector.checkThat(4, is(equalTo(5)));
        collector.checkThat("foo" , is(equalTo("bar")));
    }
}

你会得到两个失败的报告:

java.lang.AssertionError: 
Expected: is <5>
     but: was <4>

java.lang.AssertionError: 
Expected: is "bar"
     but: was "foo"

使用 JUnit 5 您可以使用assertAll方法并传递您的断言。 所有断言都将被调用,在第一个失败的断言之后测试不会停止:

@Test
void test() {
    Executable assertion1 = ()  -> Assertions.assertEquals(4, 2);
    Executable assertion2 = ()  -> Assertions.assertEquals(5, 2);
    Assertions.assertAll(assertion1, assertion2);
}

消息将是:

Multiple Failures (2 failures)
    expected: <4> but was: <2>
    expected: <5> but was: <2>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM