在我的测试情况下,我得到一个整数值:Junit的断言或条件在我的情况
int val = getXXX();
然后,我想检查是否val
或者等于3或等于5这是确定在任案件。所以,我所做的:
assertTrue(val == 3 || val==5);
我跑我的测试,日志显示val
是5,但我的上述论断的代码失败,AssertionFailedError异常。似乎我不能以这种方式使用assertTrue(...)
,那么,如何检查OR条件是否正确?
在我的测试情况下,我得到一个整数值:Junit的断言或条件在我的情况
int val = getXXX();
然后,我想检查是否val
或者等于3或等于5这是确定在任案件。所以,我所做的:
assertTrue(val == 3 || val==5);
我跑我的测试,日志显示val
是5,但我的上述论断的代码失败,AssertionFailedError异常。似乎我不能以这种方式使用assertTrue(...)
,那么,如何检查OR条件是否正确?
香港专业教育学院尝试写简单的测试:
@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
您可以使用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>
正好显示所提供的期望值和不正确的值。
为了这个工作必须包括对hamcrest-library的依赖。 JUnit仅依赖于hamcrest-core,它不包含Matchers类。 – toongeorges
虽然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));
}
您需要为每个测试用例定义一个常量;除了几个测试用例之外,我认为这是不合理的。这些常量可能远离他们使用的地方。另一个可读性问题:'Foo.VALID_VALUES.contains(i)'不如Harmcrest匹配器的方法清晰。 012mHarmcrest还提供了包含的匹配器,这也比这更好。 – garci560
调试测试和'assertTrue'语句之前检查val'的'值。它仍然是5吗? – chrylis