java JunitAssert我的测试用例中的OR条件

u5rb5r59  于 2023-01-11  发布在  Java
关注(0)|答案(5)|浏览(117)

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

int val = getXXX();

然后,我想检查val是否等于3或等于5,这两种情况都可以。

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

我运行我的测试,日志显示val为5,但是我上面的Assert代码失败,并显示AssertionFailedError。似乎我不能以这种方式使用assertTrue(...),那么,如何检查OR条件是否为真?

kx7yvsdv

kx7yvsdv1#

您可以使用Hamcrest matchers在此处获得更清晰的错误消息:

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>

准确地显示了期望值和所提供的不正确值。

nfg76nw0

nfg76nw02#

我试过写快速测试:

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

}

它总是传递,所以我猜当你的值改变时,代码之间会有一些中间代码。

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

检查值-此Assert将打印出详细的错误信息,例如:

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

qoefvg9y3#

虽然Harmcrest匹配器可以完成这项工作,但这些常量可以很容易地重构为更有意义的常量,比如有效值列表,然后可以使用contains方法检查列表中是否存在该值-- IMO也更容易阅读:

public class Foo {
    public static final List<Integer> VALID_VALUES = Arrays.asList(3, 5);
}

@Test
public void testName() {
    int i = 5;
    Assert.assertTrue(Foo.VALID_VALUES.contains(i));
}
ttvkxqim

ttvkxqim4#

在我的例子中,我想做一些复杂的Assert逻辑,所以我简单地实现了一个返回布尔值的方法,它完成了这项工作,在这个例子中它的实现方式如下:

private Boolean is3or5(Integer val) {
    if(val == 3 || val == 5) {
        return true;
    }
    return false;
}

然后进行Assert:

assertTrue(is3or5(val));

当然,如果需要,该方法可以包含更复杂的逻辑

eni9jsuy

eni9jsuy5#

使用TestNG,这也是可能的

Assert.assertTrue(val == 3 || val==5)

相关问题