Como talvez você já tenha percebido o mockito não serve só para mocks, mas serve também para testar o comportamento da classe que está sob teste com suas dependências.
Usando o mesmo exemplo da nossa classe que envia mensagens. Imagine agora que temos um novo métod que recebe uma ou várias mensagens e as envia usando o objeto connection.
Usando o Mockito podemos escrever um teste como o abaixo.
import static org.mockito.Mockito.*; //class declaration bla bla bla. @Test public void behaviourTest() { Connection connection = mock(Connection.class); MyMessageSender messageSender = new MyMessageSender(connection); messageSender.sendMultipleMessages("Mensagem 1", "Mensagem 2"); verify(connection, times(2)).sendMessage(anyString()); }
Traduzindo a Linha 11:
O Mockito também possibilita simular o retorno de mensagens.
Para demonstrar isto criaremos um novo para sabe se a nossa classe está recebendo as mensagens corretamente, nesse caso ao invés de usar o mock para testar a passagem de parâmetros para ele teremos que usa-lo para simular os retornos de seus métodos.
Testaremos a classe MyMessageReader que se parece com a seguinte classe.
Novamente nossa classe sob teste usa um objeto Connection, mas desta vez o método que chamamos é connection.readMessage()
Nosso teste então terá que simular um retorno de connection.readMessage(), usando o Mockito ficaria como o código abaixo.
Claro que como tudo em programação existe mais de uma maneira simular os retornos de chamados dos métodos, as duas linhas seguintes são equivalentes.
A primeira linha tem uma abordagem mais em linha com BDD, tanto que o método given é da classe BDDMockito.
Caso o método que simulamos o retorno receba um parâmetro podemos definir diferentes tipos de retorno para diferentes parâmetros, como no exemplo abaixo.
No próximo post de Mocks mostrarei como usar Spies em seus testes com Mock.
Se quiser o código completo pode pegar no git hub.
https://github.com/diegoy/talks-mockito
Valeu!
Mais:
Mocks com Mockito, parte 3
- Verificar que o método sendMessage com o argumento...
- uma string qualquer
- foi chamada duas vezes
O Mockito também possibilita simular o retorno de mensagens.
Para demonstrar isto criaremos um novo para sabe se a nossa classe está recebendo as mensagens corretamente, nesse caso ao invés de usar o mock para testar a passagem de parâmetros para ele teremos que usa-lo para simular os retornos de seus métodos.
Testaremos a classe MyMessageReader que se parece com a seguinte classe.
public class MyMessageReader { private Connection connection; public MyMessageReader(Connection connection) { this.connection = connection; } public String readMessage() { return connection.readMessage(); } }
Novamente nossa classe sob teste usa um objeto Connection, mas desta vez o método que chamamos é connection.readMessage()
Nosso teste então terá que simular um retorno de connection.readMessage(), usando o Mockito ficaria como o código abaixo.
@Test public void readMessageTest() { connection = mock(Connection.class); given(connection.readMessage()).willReturn("minhaMensagem"); myMessageReader = new MyMessageReader(connection); String readedMessage = myMessageReader.readMessage(); assertEquals(readedMessage, "minhaMensagem"); }
Claro que como tudo em programação existe mais de uma maneira simular os retornos de chamados dos métodos, as duas linhas seguintes são equivalentes.
given(connection.readMessage()).willReturn("minhaMensagem"); when(connection.readMessage()).thenReturn("minhaMensagem");
A primeira linha tem uma abordagem mais em linha com BDD, tanto que o método given é da classe BDDMockito.
Caso o método que simulamos o retorno receba um parâmetro podemos definir diferentes tipos de retorno para diferentes parâmetros, como no exemplo abaixo.
Mapmap = mock(Map.class); given(map.get(anyString())).willReturn(null); given(map.get("chave1")).willReturn("valor1"); map.get("chave1"); //retorna string "valor1" map.get("outraChave");//retorna nulo
No próximo post de Mocks mostrarei como usar Spies em seus testes com Mock.
Se quiser o código completo pode pegar no git hub.
https://github.com/diegoy/talks-mockito
Valeu!
Mais:
Mocks com Mockito, parte 3
Nenhum comentário:
Postar um comentário