Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

É uma prática errada possuir mais de um assert* em um único método @Test ?

Olá! Bom dia, eu possuo uma classe ViaDeComunicacao que possui um método obterString(), que além de retornar uma String, o método também exibe uma mensagem para o usuário.

Eu escrevi uma classe de Test que possui um método de teste que verifica se o usuário digitou um texto, e verifica também se a mensagem foi exibida para ele, então são dois assertEquals no mesmo método, quero saber se está errado possuir os dois assertEquals no mesmo método? Eu quero testar as duas funcionalidades do método obterString(), já que ele além de exibir a mensagem, também recupera algo que o usuário digitar e não sei se isso seria melhor realizado em um único método de teste ou talvez dois métodos.

assertEquals(mensagemExibida, "Essa mensagem deveria ser exibida para o usuário");
assertEquals(stringDigitada,  "oi");
1 resposta
solução!

Oi Wesley, tudo bom?

Se os assert fizerem parte do mesmo cenário, não tem problema. Porém, se você está testando mais de um cenário eles deveriam estar em testes separados.

Ou seja, se você está testando funcionalidades diferentes(mesmo que elas sejam executadas a partir de um método só, como é o caso do seu obterString) dentro do mesmo método de teste com mais de um assert não é muito legal.

No seu caso, estamos testando dois cenários. Um se o usuário recebe a mensagem que deveria e outro se a mensagem do usuário está sendo recebida pelo sistema.

Se você criar um cenário de teste parecido com:

verificaSeOUsuarioRecebeAMensagemESeAMensagemDeleEhRecebida()

Teriamos um caso muito extenso pra verificar caso esse teste falhasse.

Porém, se a gente quebra em:

verificaSeOUsuarioRecebeAMensagem()
verificaSeAMensagemDoUsuarioEhRecebida()

Já fica muito mais fácil de saber o que fazer caso um desses testes falhe =)

Abraço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software