Вопрос

Существует ли jUnit, параллельный NUnit? CollectionAssert?

Это было полезно?

Решение

Используя JUnit 4.4, вы можете использовать assertThat() вместе с Хэмкрест код (не волнуйтесь, он поставляется вместе с 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"))));

Используя этот подход, вы автоматически получите хорошее описание утверждения в случае его неудачи.

Другие советы

Не напрямую, нет.Я предлагаю использовать Хэмкрест, который предоставляет богатый набор правил сопоставления, которые прекрасно интегрируются с 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
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top