Утверждение Hamcrest о двух значениях

Я легко могу сделать утверждение с двумя возможными результатами:

assertThat(result, anyOf(true, false)); // just a sample, doesn't make sense as an assertion

Однако мне нужно подтвердить, что один из моих результатов равен некоторому значению:

assertThat(result1 || result2, is(true));

Вышеупомянутое работает, но в сообщении об ошибке не указано, какой результат был false. Есть ли что-нибудь похожее на нижеприведенное в Hamcrest?

assertThat(anyOf(result1, result2), is(true)); // just a hypothetical assertion

person Michal Kordas    schedule 12.06.2016    source источник
comment
В чем проблема с assertTrue (результат1 || результат2). Если утверждение не выполняется, то и результат1, и результат2 ложны. Для этого не нужно ничего особенного.   -  person JB Nizet    schedule 12.06.2016


Ответы (1)


Вы можете написать утверждение в обратном порядке:

assertThat(true, anyOf(is(result1), is(result2)))

Это все равно вызовет ошибку утверждения, если либо result1, либо result2 не true, и в сообщении будут указаны оба конечных значения или result1 и _6 _... в ожидаемой части, что делает его немного неудобным.


Из вашего вопроса:

Однако мне нужно подтвердить, что один из моих результатов равен некоторому значению:

Это означает, что ваш реальный вариант использования определяет, имеет ли список ваших результатов заданное значение. Это можно четко выразить с помощью:

assertThat(Arrays.asList(result1, result2), hasItem(true));

Это утверждение, что список, сформированный двумя результатами, имеет данный элемент. В противном случае ошибка утверждения будет:

Expected: a collection containing <true>
     but: was <false>, was <false>

Сообщение сообщает вам значение каждого элемента в коллекции.

person Tunaki    schedule 12.06.2016