Вопрос по java – Коллекция assert в jUnit?

72

Есть ли JUnit параллельно NUnit'sCollectionAssert?

Ваш Ответ

4   ответа
2

они более удобны в использовании, чем Hamcrest (и одинаково мощны, расширяемы и т. Д.) И имеют лучшую поддержку IDE благодаря свободному интерфейсу. Увидетьhttps://github.com/alexruiz/fest-assert-2.x/wiki/Using-fest-assertions

В 2017 году все больше людей используют ветку FEST под названием AssertJ.
1

но не работает, если у вас уже есть множество ожиданий, которые вы хотите проверить, есть в вашем результате. Это может произойти, когда у вас уже есть сгенерированное или постоянное ожидание в ваших тестах, с которым вы хотите сравнить результат, или, возможно, у вас есть несколько ожиданий, которые вы ожидаете объединить в результате. Таким образом, вместо использования совпадений вы можете просто использовать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
}
4

Не напрямую, нет. Я предлагаю использоватьHamcrest, который предоставляет богатый набор правил сопоставления, который прекрасно интегрируется с jUnit (и другими платформами тестирования)

Это по какой-то причине не компилируется (см.stackoverflow.com/questions/1092981/hamcrests-hasitems): ArrayList & lt; Integer & gt; actual = new ArrayList & lt; Integer & gt; (); ArrayList & л; Целое число & GT; Ожидаемый = новый ArrayList & lt; Integer & gt; (); actual.add (1); expected.add (2); assertThat (актуально, hasItems (ожидается)); ripper234
115

Используя 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"))));

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

Ох, я не поняла, что Хэмкрест попал в дистрибутив junit. Иди, Нат!
Google нашел другой ответ Stackoverflow, который я искал!
Если я хочу утверждать, что l состоит из элементов («foo», «bar»), но других элементов не существует - есть ли какой-нибудь простой синтаксис для этого? ripper234
Используйте приведенный выше фрагмент кода и добавьте дополнительный assertTrue (l.size () == 2).
Мех, уродливый В NUnit это CollectionAssert.AreEqual (ожидаемая коллекция, фактическая коллекция); ripper234

Похожие вопросы