Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lsmcodes/mockito-testes-unitarios
Resolução dos exercícios apresentados durante o curso "Desenvolvendo Testes Utilizando Mockito" - DIO
https://github.com/lsmcodes/mockito-testes-unitarios
exercises junit5 mockito santander-bootcamp-2024
Last synced: 10 days ago
JSON representation
Resolução dos exercícios apresentados durante o curso "Desenvolvendo Testes Utilizando Mockito" - DIO
- Host: GitHub
- URL: https://github.com/lsmcodes/mockito-testes-unitarios
- Owner: lsmcodes
- Created: 2024-06-20T13:14:51.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-07-17T14:35:56.000Z (7 months ago)
- Last Synced: 2024-12-02T03:15:32.957Z (2 months ago)
- Topics: exercises, junit5, mockito, santander-bootcamp-2024
- Language: Java
- Homepage: http://www.dio.me
- Size: 33.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# DIO - Trilha Testes e Gerenciamento de Dependências Java
## Autor dos Exercícios e Repositório Original
- [Willyan Guimarães Caetano](https://github.com/willyancaetano)
- [Mockito Exemplos](https://github.com/willyancaetano/mockito-exemplos)## Mockito
`Mockito` é o framework mais popular para testes com `mocks` e `spies` em aplicações Java.## Exercícios
Este repositório contém exercícios que exemplificam a utilização do Mockito e que cobrem os seguintes temas:
- Mocks
- Spies
- Capturando argumentos com Captor
- Manipulando retornos com stubs
- Mock de métodos estáticos## Configurar Mockito
Para utilizar o Mockito, adicione as dependências Mockito Core e Mockito JUnit Jupiter ao arquivo `pom.xml` ou ao `build.gradle` do seu projeto. A primeira consiste na API principal que inclui todas as funcionalidades do Mockito, a segunda dá suporte ao JUnit.
### Maven
```xmlorg.mockito
mockito-core
5.12.0
testorg.mockito
mockito-junit-jupiter
5.12.0
test```
### Gradle
```groovy
testImplementation group: 'org.mockito', name: 'mockito-core', version: '5.12.0'testImplementation group: 'org.mockito', name: 'mockito-junit-jupiter', version: '5.12.0'
```## Mocks
`Mocks` são objetos que simulam o real comportamento de dependências, a fim de testar se essas dependências serão corretamente utilizadas. No Mockito, os mocks permitem que `stubs` de chamadas de métodos sejam feitos, o que significa que é possível definir exatamente o que os métodos devem retornar ou fazer.Exemplo que simula o cadastro de uma pessoa e verifica se a pessoa foi cadastrada com os dados corretos:
```java
@Mock
private CorreiosAPI correiosAPI;@InjectMocks
private CadastrarPessoa cadastrarPessoa;@Test
void cadastrarPessoa_DeveCadastrarPessoaCorretamente_QuandoReceberDadosDeCadastro() {
// Arrange (Arranjar)
Localizacao localizacao = new Localizacao("BA", "Salvador", "Rua 10 de Junho", "Rua", "Bonfim");
Mockito.when(this.correiosAPI.encontrarLocalizacaoPeloCEP("40415-185")).thenReturn(localizacao);Pessoa pessoa = new Pessoa("Carla", "34.795.744-4", LocalDate.of(1999, 07, 21));
pessoa.setLocalizacao(localizacao);// Act (Agir)
Pessoa pessoaCadastrada = this.cadastrarPessoa.cadastrarPessoa("Carla", "34.795.744-4",
LocalDate.of(1999, 07, 21), "40415-185");// Assert (Afirmar)
assertAll(() -> assertEquals(pessoa.getNome(), pessoaCadastrada.getNome()),
() -> assertEquals(pessoa.getDocumento(), pessoaCadastrada.getDocumento()),
() -> assertEquals(pessoa.getNascimento(), pessoaCadastrada.getNascimento()),
() -> assertEquals(pessoa.getLocalizacao(), pessoaCadastrada.getLocalizacao()));
}
```## Spies
`Spies` são objetos que provêm uma forma de "espiar" o objeto real. Com um spy, é possível invocar todos os métodos reais do objeto enquanto cada interação com eles é monitorada. No Mockito, os spies são parcialmente mocks, já que com eles é possível fazer o stub de alguns métodos do objeto real, enquanto invocações reais de outros métodos do mesmo objeto também podem ser feitas.Exemplo que interage com o método adicionarMensagem e verifica se houve uma interação:
```java
@Spy
private EnviarMensagens enviarMensagens;
@Test
void enviarMensagens_DeveSeComportarCorretamente_DeAcordoComAsInteracoes() {
// Arrange (Arranjar)
Mensagem mensagem = new Mensagem("Hello, world!");
// Act (Agir)
enviarMensagens.adicionarMensagem(mensagem);
// Assert (Afirmar)
Mockito.verify(enviarMensagens).adicionarMensagem(mensagem);
}
```## Anotações
A seguir estão as anotações utilizadas nos exercícios e suas respectivas descrições.| Anotação | Descrição |
|----------------|----------------------------------------------------------------------------------|
| `@Test` | Denota que o método anotado é um método de teste |
| `@Mock` | Marca um campo como sendo um objeto mock |
| `@InjectMocks` | Marca um campo onde deve a injeção de um mock deve ser performada |
| `@Spy` | Permite o encapsulamento de uma instância de campo em um objeto spy |
| `@Captor` | Permite a criação de um ArgumentCaptor (classe que captura argumentos) em campos |## Referências
- Mockito Mock vs Spy in Spring Boot Tests - https://springframework.guru/mockito-mock-vs-spy-in-spring-boot-tests/
- Mock - https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mock.html
- InjectMocks - https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/InjectMocks.html
- Spy - https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Spy.html
- Captor - https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Captor.html## Recursos
Geradores utilizados para gerar os dados:
- Gerador de CEP - https://www.4devs.com.br/gerador_de_cep
- Gerador de RG - https://www.4devs.com.br/gerador_de_rg