Renato Groffe tem mais de 15 anos de experiência em tecnologia e possui diversas certificações. Ele fornece treinamentos sobre testes unitários automatizados, TDD, BDD e mocking tests utilizando ferramentas como Moq e NSubstitute no .NET. Seus links profissionais incluem páginas no Facebook, LinkedIn e um canal sobre .NET.
2. Mais de 15 anos de experiência na área de Tecnologia
Pós-graduação em Engenharia de Software – ênfase em
SOA
Cursando MBA em Business Intelligence (FIAP)
Graduação em Sistemas de Informação
Técnico em Processamento de Dados
MTAC (Microsoft Technical Audience Contributor), MCP,
Microsoft Specialist, MCTS, OCA, ITIL, COBIT
3. Página no Facebook
https://www.facebook.com/RenatoGroffeSW
Canal .NET
https://www.facebook.com/canaldotnet
Perfil no Facebook
https://www.facebook.com/renatogroff
LinkedIn
http://br.linkedin.com/in/renatogroffe
4. Visual Studio 2013 (preferencialmente com o
Update 5) / Visual Studio Community 2015
Moq
NSubstitute
Visual Studio Unit Testing Framework (também
conhecido como MS Test)
5. Cenários comuns dentro do desenvolvimento de
software
Testes unitários, TDD, BDD: uma visão geral
Dificuldades técnicas na implementação e
execução de testes unitários
Mocking Test
Implementação de um exemplo prático em .NET
6.
7.
8.
9. Pressões por rápida entrega
Prazos muito curtos
Equipes reduzidas
Mudanças frequentes em requisitos
Áreas de Negócio e Técnica não falam mesma língua
Testes não são levados tão a sério como se deveria
10. Metodologias ágeis
◦ XP (Extreme Programming) e Scrum são os exemplos mais
famosos
Testes unitários automatizados
◦ Validações em objetos e métodos (unidades)
◦ Alternativas na plataforma .NET:
Visual Studio Unit Testing Framework (MS Test)
NUnit (http://www.nunit.org/)
xUnit.net (https://github.com/xunit)
11. TDD – Test-Driven Development
◦ Testes unitários codificados antes mesmo da implementação
das partes que serão submetidas a análises → evita-se assim
a elaboração de testes “viciados”
12. 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
13. A implementação de uma funcionalidade segue um ciclo
chamado Red-Green-Refactor (os testes unitários são
executados em todos os estágios)
14.
15. Teste de aceitação → User story que serve de base para a
implementação de uma funcionalidade e posterior validação da
mesma
16.
17. 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
18.
19.
20. Fake objects → implementações para a geração de
objetos necessários, porém descartadas em
produção
Mocks → enfatizam a interação entre objetos
(comportamento), com possíveis falhas de execução
21. 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
22. NSubstitute
◦ Framework também open source
◦ Alternativa ao uso do Moq, com um funcionamento bastante
semelhante ao deste último
23. 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
25. Estruturas definidas no namespace Moq
Importar no projeto de testes o package deste framework
que se encontra no NuGet
Empregado em conjunto com frameworks como MS Test,
Nunit, xUnit.net, SpecFlow
26. Utilizar a classe genérica Mock em conjunto com o tipo a
ser simulado (normalmente uma interface)
◦ Método Setup → configura o método ou propriedade a ser simulado
◦ Método Returns → retorno a ser devolvido pelo elemento que se está
simulando
◦ Método Throws → exceção que ocorre ao se invocar um método ou
propriedade
Acessar a propriedade Object da instância genérica do
tipo Mock, a fim de obter a referência que simula um
comportamento
27. Alguns exemplos sobre como configurar um Mock Object (uma
referência mais completa pode ser encontra no site do Moq):
28. Estruturas definidas no namespace NSubstitute
Também importar no projeto de testes o package deste
framework que se encontra no NuGet
Também empregado em conjunto com frameworks como
MS Test, Nunit, xUnit.net, SpecFlow
29. Utilizar o método genérico For da classe Substitute em
conjunto com o tipo a ser simulado (normalmente uma
interface)
◦ Método Returns → retorno a ser devolvido pelo elemento que se está
simulando (valor ou exceção)
O objeto retornado pelo método For será o mesmo que
servirá de base para a simulação de um comportamento
30. Exemplo sobre como configurar um Mock Object (uma referência
mais completa pode ser encontra no site do NSubstitute):
31. Link para download da solução de exemplo:
https://gallery.technet.microsoft.com/Exemplo-de-utilizao-dos-9537c977
33. Mocks não são Stubs
http://www.infoq.com/br/articles/mocks-Arent-Stubs
Moq – Quickstart
https://github.com/Moq/moq4/wiki/Quickstart
NSubstitute: Docs and getting help
http://nsubstitute.github.io/help.html
Unit Testing with Mock Objects
https://msdn.microsoft.com/en-us/library/ff650441.aspx