[英]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.