Junit утверждать ИЛИ условие в моем тестовом случае
В моем тестовом примере я получаю целочисленное значение:
int val = getXXX();
Затем я хотел бы проверить, равен ли val
3 или равен 5, что в любом случае нормально. Так я и сделал:
assertTrue(val == 3 || val==5);
Я запускаю свой тест, журнал показывает, что val
равен 5, но мой код подтверждения выше не удался с AssertionFailedError. Кажется, я не могу использовать assertTrue(...)
таким образом, то, как проверить истину для условия ИЛИ?
Ответы
Ответ 1
ive попытался написать быстрый тест:
@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
Ответ 2
Вы можете использовать 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>
отображая точно ожидаемое и неверное значение, которое было предоставлено.
Ответ 3
В то время как помощники Harmcrest могут выполнять эту работу, эти константы могут быть легко реорганизованы на более значимую константу, например список действительных значений. Затем вы можете использовать метод contains
, чтобы проверить, что это значение присутствует в списке. ИМО также легче читать:
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));
}
Ответ 4
В моем случае я хотел сделать некоторую сложную логику утверждения, поэтому я просто реализовал метод, который возвращает логическое значение, и он выполнил свою работу, как это будет реализовано в этом примере, следующим образом:
private Boolean is3or5(Integer val) {
if(val == 3 || val == 5) {
return true;
}
return false;
}
Затем сделайте утверждение:
assertTrue(is3or5(val));
Конечно, метод может содержать более сложную логику, если это необходимо