Mocking Test - Codificando Night Weekend 2016
-
Upload
renato-groff -
Category
Software
-
view
285 -
download
0
Transcript of Mocking Test - Codificando Night Weekend 2016
![Page 1: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/1.jpg)
Mocking TestTESTANDO O QUE PARECE IMPOSSÍVEL DE SER VERIFICADO
![Page 2: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/2.jpg)
Renato Groffe Microsoft Technical Audience Contributor (MTAC), MCP, MCTS, OCA, ITIL, COBIT
Mais de 15 anos de experiência na área de Tecnologia
Articulista e Palestrante (Devmedia, .NET Magazine, Canal .NET, TechNet Wiki,
.NET Coders, TI Selvagem, DotNetBaixada)
Contatos◦ Facebook: https://www.facebook.com/renatogroff◦ Site: http://renatogroffe.net/◦ Canal .NET: https://www.facebook.com/canaldotnet◦ LinkedIn: http://br.linkedin.com/in/renatogroffe
![Page 3: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/3.jpg)
Agenda◦ Cenários comuns dentro do desenvolvimento de software
◦ Testes automatizados: uma visão geral
◦ Dificuldades técnicas na implementação e execução de testes automatizados
◦ Mocking Test
◦ Exemplos no Visual Studio 2015
![Page 4: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/4.jpg)
Desenvolvimento de Software – Cenários comuns
![Page 5: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/5.jpg)
Desenvolvimento – Cenários comuns
◦ Pressões por uma rápida entrega, prazos muito curtos
![Page 6: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/6.jpg)
Desenvolvimento – Cenários comuns
◦ Equipes reduzidas
![Page 7: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/7.jpg)
Desenvolvimento – Cenários comuns
◦ Mudanças frequentes em requisitos
![Page 8: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/8.jpg)
Desenvolvimento – Cenários Comuns◦ Áreas de Negócio e Técnica nem sempre falam a mesma língua
![Page 9: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/9.jpg)
Desenvolvimento – Cenários comuns
◦ Testes não são levados tão a sério como se deveria
![Page 10: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/10.jpg)
Como contornar estes problemas?
![Page 11: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/11.jpg)
Como contornar estes problemas?Metodologias ágeis◦ XP (Extreme Programming) e Scrum são os
exemplos mais famosos
Testes de unidade automatizados◦ Validações em objetos e métodos (unidades)
◦ Alternativas na plataforma .NET:◦ Visual Studio Unit Testing Framework (MS Test)◦ NUnit◦ xUnit.net
![Page 12: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/12.jpg)
Como contornar estes problemas?TDD – Test-Driven Development
◦ Testes de unidade codificados antes mesmo da implementação das partes que serão submetidas a análises
◦ Evita-se assim a elaboração de testes “viciados”
![Page 13: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/13.jpg)
Como contornar estes problemas?Ciclo de desenvolvimento em TDD → testes automatizados executados em todos os estágios
![Page 14: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/14.jpg)
Como contornar estes problemas?BDD – Behavior-Driven Development
◦ Testes baseados em user stories (histórias)
◦ Vocabulário compartilhado entre áreas de negócio e técnica (linguagem ubíqua)
◦ Frameworks permitem que as user stories sejam executadas como testes automatizados → uma alternativa muito utilizada em .NET é o SpecFlow
![Page 15: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/15.jpg)
Como contornar estes problemas?
BDD – Estrutura deUma User Story:
![Page 16: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/16.jpg)
Como contornar estes problemas?Teste de aceitação em BDD → User story que serve de base para a implementação de uma funcionalidade e posterior validação da mesma
![Page 17: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/17.jpg)
Sempre será fácil testar?
![Page 18: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/18.jpg)
Dificuldades técnicas comuns◦ Dependências entre diferentes partes de um
software
◦ Inexistência de ambientes com configurações específicas para testes
◦ Integrações com parceiros que não disponibilizam condições adequadas para testes
◦ O teste de determinados recursos precisa esperar pela conclusão de uma ou mais funcionalidades específicas
![Page 19: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/19.jpg)
Como superar então estas dificuldades?
![Page 20: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/20.jpg)
Simulando...
![Page 21: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/21.jpg)
Imitando...
![Page 22: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/22.jpg)
Algumas soluções para testes automatizadosImplementações fake
◦ Trechos de código ou classes stub para a geração dos objetos requeridos pelos testes
◦ Estruturas normalmente descartadas em produção
![Page 23: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/23.jpg)
Algumas soluções para testes automatizadosMock Objects
◦ Estruturas que simulam objetos reais
◦ Enfatizam a interação entre objetos (comportamento), prevendo inclusive possíveis falhas de execução
◦ Frameworks simplificam a utilização destas construções
![Page 24: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/24.jpg)
Mocking Test em .NET
![Page 25: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/25.jpg)
Moq◦ Framework open source
◦ Simplifica a utilização de Mocks na validação de soluções construídas em .NET
◦ Permite definir o retorno de métodos, propriedades e até a geração de exceções em tempo de execução
◦ Dispensa a criação de Fakes e outras estruturas que seriam descartadas posteriormente
![Page 26: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/26.jpg)
NSubstitute
◦ Framework também open source
◦ Alternativa ao uso do Moq, com um funcionamento bastante semelhante ao deste último
![Page 27: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/27.jpg)
E como utilizar isso em .NET?Combinando o uso do Moq ou Nsubstitute a frameworks como MS Test, NUnit, xUnit.net, SpecFlow, Selenium....
![Page 28: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/28.jpg)
Exemplos práticos
![Page 29: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/29.jpg)
Caso de Estudo◦ Consulta a um serviço de crédito (via CPF) – status possíveis:
◦ Parâmetro de envio inválido (retorno de pendências = null)◦ Erro de comunicação (exceção retornada ao se invocar o serviço)◦ Pessoa física sem Pendências (zero itens no retorno de pendências) ◦ Pessoa física inadimplente (ao menos uma pendência encontrada)
◦ A ideia por trás do uso de Mock Objects nesta situação é evitar consultas a um tipo de serviço que é pago → as empresas que fornecem os dados não costumam disponibilizar ambientes para testes
![Page 30: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/30.jpg)
Caso de Estudo
![Page 31: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/31.jpg)
Caso de Estudo◦ Primeiro Exemplo → NUnit + Moq
◦ Segundo Exemplo → MS Test + NSubstitute
![Page 32: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/32.jpg)
Dúvidas?
![Page 33: Mocking Test - Codificando Night Weekend 2016](https://reader035.fdocuments.net/reader035/viewer/2022070522/58ee63991a28ab85208b4659/html5/thumbnails/33.jpg)
Obrigado!