Quando olho para os exemplos na classe Assert JavaDoc
assertThat("Help! Integers don't work", 0, is(1)); // fails:
// failure message:
// Help! Integers don't work
// expected: is <1>
// got value: <0>
assertThat("Zero is one", 0, is(not(1))) // passes
Não vejo uma grande vantagem, digamos assertEquals( 0, 1 )
.
Talvez seja bom para as mensagens se as construções ficarem mais complicadas, mas você vê mais vantagens? Legibilidade?
assertTrue
com um&&
. Separá-lo em duas condições torna a causa do problema óbvia, mesmo no JUnit. Não me interpretem mal; Eu concordo com você, eu apenas não gosto do seu exemplo.As notas de versão do JUnit para a versão 4.4 (onde foi introduzida) apresentam quatro vantagens:
Argumentação mais detalhada do cara que criou a nova sintaxe: aqui .
fonte
Basicamente, para aumentar a legibilidade do código .
Além de hamcrest, você também pode usar as afirmações do fest . Eles têm algumas vantagens sobre o hamcrest , como:
(
assertEquals(123, actual); // reads "assert equals 123 is actual"
vsassertThat(actual).isEqualTo(123); // reads "assert that actual is equal to 123")
Alguns exemplos
17 de outubro de 2016 Atualização
O Fest não está mais ativo, use o AssertJ .
fonte
Uma justificativa muito básica é que é difícil atrapalhar a nova sintaxe.
Suponha que um valor específico, foo, seja 1 após um teste.
--OU--
Com a primeira abordagem, é muito fácil esquecer a ordem correta e digitá-la ao contrário. Então, em vez de dizer que o teste falhou porque esperava 1 e obteve 2, a mensagem é invertida. Não é um problema quando o teste passa, mas pode causar confusão quando o teste falha.
Com a segunda versão, é quase impossível cometer esse erro.
fonte
Exemplo:
btw: você também pode escrever texto no assertXXX ...
fonte
assertThat
caso, porque a mensagem que você recebe automaticamente é igualmente informativa: "Esperado: (um valor maior que <1> e menor que <3>)"Está perto da linguagem natural.
Leitura mais fácil, código de análise mais fácil. O programador passa mais tempo analisando o código do que escrevendo um novo. Portanto, se o código for fácil de analisar, o desenvolvedor deve ser mais produtivo.
Código PS deve ser um livro bem escrito. Código auto-documentado.
fonte
há vantagens em afirmarThat over assertEquals -
1) mais legível
2) mais informações sobre falha
3) erros de tempo de compilação - em vez de erros em tempo de execução
4) flexibilidade nas condições de teste de gravação
5) portátil - se você estiver usando hamcrest - você pode usar jUnit ou TestNG como a estrutura subjacente.
fonte