Renato Groffe
Julho/2015
 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
 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
 Visual Studio 2013 (preferencialmente com o
Update 4)
 Moq
 Visual Studio Unit Testing Framework
(também conhecido como MS Test)
 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
 Dummy objects, fake, stubs e mocks
 Implementação de um exemplo prático em .NET
 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
 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)
 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”
 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
 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)
 Teste de aceitação → User story que serve de base para a
implementação de uma funcionalidade e posterior validação da
mesma
 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
 Dummy objects → criação de objetos/parâmetros
obrigatórios, mas que não afetarão o andamento de um
teste
 Fake objects → implementações para a geração de
objetos necessários, porém descartadas em produção
 Stubs → foco na verificação de estados/valores, não
resultam em falhas nos testes
 Mocks → enfatizam a interação entre objetos
(comportamento), com possíveis falhas de execução
 Moq
◦ Framework open source
◦ Simplifica a utilização de Mocks e Stubs 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
 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
 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
 Alguns exemplos sobre como configurar um Mock Object (uma
referência mais completa pode ser encontra no site do Moq):
 Consulta a um serviço de crédito (via CPF) – status possíveis:
◦ Parâmetro de envio inválido
◦ Erro de comunicação
◦ Pessoa física sem Pendências
◦ Pessoa física inadimplente
 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
 Representação esquemática das classes a serem utilizadas:
 Link para download da solução de exemplo:
https://gallery.technet.microsoft.com/Exemplo-de-utilizao-dos-9537c977
Dúvidas, sugestões???
 Mocks não são Stubs
http://www.infoq.com/br/articles/mocks-Arent-Stubs
 Moq – Quickstart
https://github.com/Moq/moq4/wiki/Quickstart
 Unit Testing with Mock Objects
https://msdn.microsoft.com/en-us/library/ff650441.aspx
Obrigado!!!

Mocking Test

  • 1.
  • 2.
     Mais de15 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 noFacebook 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 Studio2013 (preferencialmente com o Update 4)  Moq  Visual Studio Unit Testing Framework (também conhecido como MS Test)
  • 5.
     Cenários comunsdentro 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  Dummy objects, fake, stubs e mocks  Implementação de um exemplo prático em .NET
  • 9.
     Pressões porrá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çãode uma funcionalidade segue um ciclo chamado Red-Green-Refactor (os testes unitários são executados em todos os estágios)
  • 15.
     Teste deaceitação → User story que serve de base para a implementação de uma funcionalidade e posterior validação da mesma
  • 17.
     Dependências entrediferentes 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
  • 20.
     Dummy objects→ criação de objetos/parâmetros obrigatórios, mas que não afetarão o andamento de um teste  Fake objects → implementações para a geração de objetos necessários, porém descartadas em produção  Stubs → foco na verificação de estados/valores, não resultam em falhas nos testes  Mocks → enfatizam a interação entre objetos (comportamento), com possíveis falhas de execução
  • 21.
     Moq ◦ Frameworkopen source ◦ Simplifica a utilização de Mocks e Stubs 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.
     Estruturas definidasno 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
  • 23.
     Utilizar aclasse 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
  • 24.
     Alguns exemplossobre como configurar um Mock Object (uma referência mais completa pode ser encontra no site do Moq):
  • 25.
     Consulta aum serviço de crédito (via CPF) – status possíveis: ◦ Parâmetro de envio inválido ◦ Erro de comunicação ◦ Pessoa física sem Pendências ◦ Pessoa física inadimplente  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
  • 26.
     Representação esquemáticadas classes a serem utilizadas:
  • 27.
     Link paradownload da solução de exemplo: https://gallery.technet.microsoft.com/Exemplo-de-utilizao-dos-9537c977
  • 28.
  • 29.
     Mocks nãosão Stubs http://www.infoq.com/br/articles/mocks-Arent-Stubs  Moq – Quickstart https://github.com/Moq/moq4/wiki/Quickstart  Unit Testing with Mock Objects https://msdn.microsoft.com/en-us/library/ff650441.aspx
  • 30.