{"id":22157848,"url":"https://github.com/lsmcodes/mockito-testes-unitarios","last_synced_at":"2025-08-06T15:22:54.715Z","repository":{"id":245492194,"uuid":"817799286","full_name":"lsmcodes/mockito-testes-unitarios","owner":"lsmcodes","description":"Resolução dos exercícios apresentados durante o curso \"Desenvolvendo Testes Utilizando Mockito\" - DIO","archived":false,"fork":false,"pushed_at":"2024-07-17T14:35:56.000Z","size":34,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-29T19:48:33.393Z","etag":null,"topics":["exercises","junit5","mockito","santander-bootcamp-2024"],"latest_commit_sha":null,"homepage":"http://www.dio.me","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lsmcodes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-20T13:14:51.000Z","updated_at":"2024-07-17T14:36:00.000Z","dependencies_parsed_at":"2025-01-29T19:42:34.112Z","dependency_job_id":null,"html_url":"https://github.com/lsmcodes/mockito-testes-unitarios","commit_stats":null,"previous_names":["lsmcodes/mockito-testes-unitarios"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fmockito-testes-unitarios","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fmockito-testes-unitarios/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fmockito-testes-unitarios/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fmockito-testes-unitarios/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lsmcodes","download_url":"https://codeload.github.com/lsmcodes/mockito-testes-unitarios/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245294764,"owners_count":20591899,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["exercises","junit5","mockito","santander-bootcamp-2024"],"created_at":"2024-12-02T03:15:47.664Z","updated_at":"2025-03-24T14:48:16.145Z","avatar_url":"https://github.com/lsmcodes.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DIO - Trilha Testes e Gerenciamento de Dependências Java\n\u003cdiv style=\"display:inline-block\"\u003e\n        \u003cpicture\u003e\n                \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://img.shields.io/badge/Java-black?style=for-the-badge\u0026logo=OpenJDK\u0026logoColor=white\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Java-white?style=for-the-badge\u0026logo=OpenJDK\u0026logoColor=black\" /\u003e\n        \u003c/picture\u003e\n        \u003cpicture\u003e\n                \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://img.shields.io/badge/Maven-black?style=for-the-badge\u0026logo=ApacheMaven\u0026logoColor=white\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Maven-white?style=for-the-badge\u0026logo=ApacheMaven\u0026logoColor=black\" /\u003e\n        \u003c/picture\u003e\n        \u003cpicture\u003e\n                \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://img.shields.io/badge/Spring_Boot-black?style=for-the-badge\u0026logo=SpringBoot\u0026logoColor=white\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Spring_Boot-white?style=for-the-badge\u0026logo=SpringBoot\u0026logoColor=black\" /\u003e\n        \u003c/picture\u003e\n        \u003cpicture\u003e\n                \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://img.shields.io/badge/JUnit5-black?style=for-the-badge\u0026logo=JUnit5\u0026logoColor=white\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/JUnit5-white?style=for-the-badge\u0026logo=JUnit5\u0026logoColor=black\" /\u003e\n        \u003c/picture\u003e\n\u003c/div\u003e\n\n## Autor dos Exercícios e Repositório Original\n- [Willyan Guimarães Caetano](https://github.com/willyancaetano)\n- [Mockito Exemplos](https://github.com/willyancaetano/mockito-exemplos)\n\n## Mockito\n`Mockito` é o framework mais popular para testes com `mocks` e `spies` em aplicações Java.\n\n## Exercícios\nEste repositório contém exercícios que exemplificam a utilização do Mockito e que cobrem os seguintes temas:\n- Mocks\n- Spies\n- Capturando argumentos com Captor\n- Manipulando retornos com stubs\n- Mock de métodos estáticos\n\n## Configurar Mockito\nPara 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.\n### Maven\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.mockito\u003c/groupId\u003e\n    \u003cartifactId\u003emockito-core\u003c/artifactId\u003e\n    \u003cversion\u003e5.12.0\u003c/version\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.mockito\u003c/groupId\u003e\n    \u003cartifactId\u003emockito-junit-jupiter\u003c/artifactId\u003e\n    \u003cversion\u003e5.12.0\u003c/version\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n\n```\n\n### Gradle\n```groovy\ntestImplementation group: 'org.mockito', name: 'mockito-core', version: '5.12.0'\n\ntestImplementation group: 'org.mockito', name: 'mockito-junit-jupiter', version: '5.12.0'\n```\n\n## Mocks\n`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.\n\nExemplo que simula o cadastro de uma pessoa e verifica se a pessoa foi cadastrada com os dados corretos:\n```java\n@Mock\nprivate CorreiosAPI correiosAPI;\n\n@InjectMocks\nprivate CadastrarPessoa cadastrarPessoa;\n\n@Test\nvoid cadastrarPessoa_DeveCadastrarPessoaCorretamente_QuandoReceberDadosDeCadastro() {\n        // Arrange (Arranjar)\n        Localizacao localizacao = new Localizacao(\"BA\", \"Salvador\", \"Rua 10 de Junho\", \"Rua\", \"Bonfim\");\n        Mockito.when(this.correiosAPI.encontrarLocalizacaoPeloCEP(\"40415-185\")).thenReturn(localizacao);\n\n        Pessoa pessoa = new Pessoa(\"Carla\", \"34.795.744-4\", LocalDate.of(1999, 07, 21));\n        pessoa.setLocalizacao(localizacao);\n\n        // Act (Agir)\n        Pessoa pessoaCadastrada = this.cadastrarPessoa.cadastrarPessoa(\"Carla\", \"34.795.744-4\",\n                        LocalDate.of(1999, 07, 21), \"40415-185\");\n\n        // Assert (Afirmar)\n        assertAll(() -\u003e assertEquals(pessoa.getNome(), pessoaCadastrada.getNome()),\n                        () -\u003e assertEquals(pessoa.getDocumento(), pessoaCadastrada.getDocumento()),\n                        () -\u003e assertEquals(pessoa.getNascimento(), pessoaCadastrada.getNascimento()),\n                        () -\u003e assertEquals(pessoa.getLocalizacao(), pessoaCadastrada.getLocalizacao()));\n}\n```\n\n## Spies\n`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.\n\nExemplo que interage com o método adicionarMensagem e verifica se houve uma interação:\n```java\n@Spy\nprivate EnviarMensagens enviarMensagens;\n    \n@Test\nvoid enviarMensagens_DeveSeComportarCorretamente_DeAcordoComAsInteracoes() {\n        // Arrange (Arranjar)\n        Mensagem mensagem = new Mensagem(\"Hello, world!\");\n    \n        // Act (Agir)\n        enviarMensagens.adicionarMensagem(mensagem);\n    \n        // Assert (Afirmar)\n        Mockito.verify(enviarMensagens).adicionarMensagem(mensagem);\n}\n```\n\n## Anotações\nA seguir estão as anotações utilizadas nos exercícios e suas respectivas descrições.\n\n| Anotação       | Descrição                                                                        |\n|----------------|----------------------------------------------------------------------------------|\n| `@Test`        | Denota que o método anotado é um método de teste                                 |\n| `@Mock`        | Marca um campo como sendo um objeto mock                                         |\n| `@InjectMocks` | Marca um campo onde deve a injeção de um mock deve ser performada                |\n| `@Spy`         | Permite o encapsulamento de uma instância de campo em um objeto spy              |\n| `@Captor`      | Permite a criação de um ArgumentCaptor (classe que captura argumentos) em campos |\n\n\n## Referências\n- Mockito Mock vs Spy in Spring Boot Tests - https://springframework.guru/mockito-mock-vs-spy-in-spring-boot-tests/\n- Mock - https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mock.html\n- InjectMocks - https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/InjectMocks.html\n- Spy - https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Spy.html\n- Captor - https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Captor.html\n\n## Recursos\nGeradores utilizados para gerar os dados:\n- Gerador de CEP - https://www.4devs.com.br/gerador_de_cep\n- Gerador de RG - https://www.4devs.com.br/gerador_de_rg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flsmcodes%2Fmockito-testes-unitarios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flsmcodes%2Fmockito-testes-unitarios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flsmcodes%2Fmockito-testes-unitarios/lists"}