Pergunta

Existe uma jUnit paralelo ao do NUnit CollectionAssert ?

Foi útil?

Solução

Usando JUnit 4.4 você pode usar assertThat() juntamente com a Hamcrest código (não se preocupe, é fornecido com JUnit, há necessidade de um .jar adicional) para produzir complexo auto-descrevendo afirma inclusive que operam em coleções:

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"))));

Usando essa abordagem, você vai automagicamente ter uma boa descrição do assert quando ele falhar.

Outras dicas

Não diretamente, não. Eu sugiro o uso de Hamcrest , que fornece um rico conjunto de regras de correspondência que integra bem com jUnit (e outros testando enquadramentos)

Dê uma olhada FEST Fluente afirmações. IMHO eles são mais convenientes de usar do que Hamcrest (e igualmente poderoso, extensível etc) e têm melhor suporte IDE graças à interface fluente. Consulte https://github.com/alexruiz/fest- assert-2.x / wiki / Usando-Fest-afirmações

A solução de Joachim Sauer é bom, mas não funciona se você já tem um conjunto de expectativas que pretende verificar estão em seu resultado. Isso pode aparecer quando você já tem uma expectativa gerado ou constante em seus testes que você quiser comparar um resultado para, ou talvez você tem várias expectativas que você espera a serem incorporadas no resultado. Então, em vez de usar matchers você pode pode apenas usar List::containsAll e assertTrue Por exemplo:

@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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top