Есть ли jUnit, параллельный NUnit CollectionAssert
?
84
Используя JUnit 4.4, вы можете использовать assertThat()
вместе с кодом Hamcrest (не волнуйтесь, он поставляется с JUnit, нет необходимости в дополнительном .jar
) для создания сложных самоописываемых утверждений, включая те, которые работают с коллекциями:
import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.*;
import static org.hamcrest.CoreMatchers.*;
List<String> l = Arrays.asList("foo", "bar");
assertThat(l, hasItems("foo", "bar"));
assertThat(l, not(hasItem((String) null)));
assertThat(l, not(hasItems("bar", "quux")));
// check if two objects are equal with assertThat()
// the following three lines of code check the same thing.
// the first one is the "traditional" approach,
// the second one is the succinct version and the third one the verbose one
assertEquals(l, Arrays.asList("foo", "bar")));
assertThat(l, is(Arrays.asList("foo", "bar")));
assertThat(l, is(equalTo(Arrays.asList("foo", "bar"))));
Используя этот подход, вы автоматически получите хорошее описание утверждения, когда оно терпит неудачу.
Не прямо, нет. Я предлагаю использовать Hamcrest , который предоставляет богатый набор правил сопоставления, который хорошо интегрируется с jUnit (и другими средами тестирования).
источник
Взгляните на FEST Fluent Assertions. ИМХО, они более удобны в использовании, чем Hamcrest (и столь же мощны, расширяемы и т. Д.), И имеют лучшую поддержку IDE благодаря свободному интерфейсу. См. Https://github.com/alexruiz/fest-assert-2.x/wiki/Using-fest-assertions.
источник
Решение Йоахима Зауэра хорошее, но не работает, если у вас уже есть ряд ожиданий, которые вы хотите проверить, есть ли в вашем результате. Это может возникнуть, когда у вас уже есть сформированное или постоянное ожидание в ваших тестах, с которым вы хотите сравнить результат, или, возможно, у вас есть несколько ожиданий, которые вы ожидаете объединить в результате. Поэтому вместо использования сопоставителей вы можете просто использовать
List::containsAll
и.assertTrue
Например:@Test public void testMerge() { final List<String> expected1 = ImmutableList.of("a", "b", "c"); final List<String> expected2 = ImmutableList.of("x", "y", "z"); final List<String> result = someMethodToTest(); assertThat(result, hasItems(expected1)); // COMPILE ERROR; DOES NOT WORK assertThat(result, hasItems(expected2)); // COMPILE ERROR; DOES NOT WORK assertTrue(result.containsAll(expected1)); // works~ but has less fancy assertTrue(result.containsAll(expected2)); // works~ but has less fancy }
источник
hasItems(expected1.toArray(new String[expected1.size()]))
. Это даст вам более точные сообщения об ошибках.