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));

Конечно, метод может содержать более сложную логику, если это необходимо