Junit 在我的测试用例中断言 OR 条件

2022-09-01 08:05:19

在我的测试用例中,我得到一个整数值:

int val = getXXX();

然后,我想检查是否等于3或等于5,这在任何一种情况下都是可以的。所以,我做了:val

assertTrue(val == 3 || val==5);

我运行测试,日志显示为5,但我上面的断言代码因AssersisFailedError而失败。看来我不能以这种方式使用,那么,如何检查OR条件的真实情况呢?valassertTrue(...)


答案 1

您可以使用Hamcrest匹配器在此处获取更清晰的错误消息:

int i = 2;
assertThat(i, Matchers.either(Matchers.is(3)).or(Matchers.is(5))

or

int i = 2;
assertThat(i, Matchers.anyOf(Matchers.is(3),Matchers.is(5)));

这将更清楚地解释:

Expected: (is <3> or is <5>)
     but: was <2>

准确显示期望值和提供的错误值。


答案 2

我试图写快速测试:

@Test
public void testName() {
    int i = 5;
    junit.framework.Assert.assertTrue(i == 3 || i == 5);

}

它总是通过,所以我想当你的值改变时,中间有一些代码。您可以使用

org.junit.Assert.assertEquals(5, i);

检查值 - 此断言将打印出错误的信息,例如:

java.lang.AssertionError: 
Expected :4
Actual   :5

推荐