在我的测试用例中,我得到一个整数值:
int val = getXXX();
然后,我想检查是否val
等于 3 或等于 5,这两种情况都可以。所以我做了:
assertTrue(val == 3 || val==5);
我运行测试,日志显示为 5,但我上面的断言代码因AssertionFailedErrorval
而失败。看来我不能用这种方式,那么,如何检查 OR 条件是否为真?assertTrue(...)
在我的测试用例中,我得到一个整数值:
int val = getXXX();
然后,我想检查是否val
等于 3 或等于 5,这两种情况都可以。所以我做了:
assertTrue(val == 3 || val==5);
我运行测试,日志显示为 5,但我上面的断言代码因AssertionFailedErrorval
而失败。看来我不能用这种方式,那么,如何检查 OR 条件是否为真?assertTrue(...)
您可以使用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>
准确显示所提供的期望值和错误值。
我试图编写快速测试:
@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
虽然 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));
}
在我的例子中,我想做一些复杂的断言逻辑,所以我简单地实现了一个返回布尔值的方法,它完成了这项工作,在这个例子中它的实现方式如下:
private Boolean is3or5(Integer val) {
if(val == 3 || val == 5) {
return true;
}
return false;
}
然后做断言:
assertTrue(is3or5(val));
当然,如果需要,该方法可以包含更复杂的逻辑