2015-04-25 3 views
1

Я хотел бы написать утверждение юнита, которое выражает: «целое число X должно быть от 10 до 17», но я не могу найти простой способ сделать это. Мне действительно нужно реализовать пользовательский Matcher? Мне нужно сообщение об ошибке, которое сообщает мне, что такое фактическое значение.Утверждение целочисленного диапазона в junit?

ответ

1

AssertJ имеет соединитель isBetween(a, b), встроенный в его AbstractIntegerAssert. Простой тест, который читается как естественный язык даст содержательный отчет об ошибке «бесплатно»:

Integer x = 5; 
assertThat(x).isBetween(10, 17); 

Выход:

java.lang.AssertionError: 
Expecting: 
<5> 
to be between: 
[10, 17] 
4

Что случилось с:

int high = 17; 
int low = 10; 
assertTrue(myInteger + " is not in [" + low + ", " + high + "]", 
      myInteger >= low && myInteger <= high); 

?

Если вы используете это более одного раза, воспользуйтесь им.

+1

Вы можете включить MyInteger в «Мои сообщения», в соответствии с просьбой ОП. :) –

+0

@AndreasGnyp да, это хорошая идея :) –

+0

@ReutSharabani: если вы следуете этой линии мышления, все потребности API - это «fail (msg)» или, возможно, 'assertTrue (c, msg)'. Все другие методы, такие как 'assertEquals (один, два, msg)', не нужны. Учитывая, что они существуют ... Наверное, я понимаю, что API действительно неравномерен, и не только я не нахожу вызов. –