Transcript
Page 1: Mocking Test - Outubro/2015

Mocking Test

Renato GroffeOutubro/2015

Page 2: Mocking Test - Outubro/2015

Apresentação – Renato Groffe

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

Page 3: Mocking Test - Outubro/2015

Contatos Página no Facebook

https://www.facebook.com/RenatoGroffeSW

Canal .NEThttps://www.facebook.com/canaldotnet

Perfil no Facebookhttps://www.facebook.com/renatogroff

LinkedInhttp://br.linkedin.com/in/renatogroffe

Page 4: Mocking Test - Outubro/2015

Recursos Utilizados 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)

Page 5: Mocking Test - Outubro/2015

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

Agenda

Page 6: Mocking Test - Outubro/2015

Software: esperado x entregue

Page 7: Mocking Test - Outubro/2015

Desenvolvimento de Software atualmente...

Page 8: Mocking Test - Outubro/2015

Testes são realmente vistos como algo importante?

Page 9: Mocking Test - Outubro/2015

Desenvolvimento de Software – Cenários Comuns 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

Page 10: Mocking Test - Outubro/2015

Como contornar estes problemas?

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)

Page 11: Mocking Test - Outubro/2015

Como contornar estes problemas?

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”

Page 12: Mocking Test - Outubro/2015

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 13: Mocking Test - Outubro/2015

Ciclo de desenvolvimento em TDD

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)

Page 14: Mocking Test - Outubro/2015

BDD – Estrutura de uma User Story

Page 15: Mocking Test - Outubro/2015

Ciclo de Desenvolvimento em BDD Teste de aceitação → User story que serve de base para a

implementação de uma funcionalidade e posterior validação da mesma

Page 16: Mocking Test - Outubro/2015

Sempre será fácil testar?

Page 17: Mocking Test - Outubro/2015

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

Page 18: Mocking Test - Outubro/2015

Solução? Simular!!!

Page 19: Mocking Test - Outubro/2015

Ou imitar...

Page 20: Mocking Test - Outubro/2015

Solucionando estas dificuldades em testes unitários

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

Page 21: Mocking Test - Outubro/2015

Como implementar isto simplificadamente em .NET? 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 22: Mocking Test - Outubro/2015

Como implementar isto simplificadamente em .NET? NSubstitute

◦ Framework também open source

◦ Alternativa ao uso do Moq, com um funcionamento bastante semelhante ao deste último

Page 23: Mocking Test - Outubro/2015

Exemplo prático – Mocking Test 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 24: Mocking Test - Outubro/2015

Exemplo prático – Mocking Test Representação esquemática das classes a serem utilizadas:

Page 25: Mocking Test - Outubro/2015

Como utilizar o Moq?

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

Page 26: Mocking Test - Outubro/2015

Como utilizar o Moq?

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

Page 27: Mocking Test - Outubro/2015

Como utilizar o Moq? Alguns exemplos sobre como configurar um Mock Object (uma

referência mais completa pode ser encontra no site do Moq):

Page 28: Mocking Test - Outubro/2015

Como utilizar o NSubstitute?

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

Page 29: Mocking Test - Outubro/2015

Como utilizar o NSubstitute?

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

Page 30: Mocking Test - Outubro/2015

Como utilizar o NSubstitute? Exemplo sobre como configurar um Mock Object (uma referência

mais completa pode ser encontra no site do NSubstitute):

Page 31: Mocking Test - Outubro/2015

Fontes utilizados nesta apresentação

Link para download da solução de exemplo:

https://gallery.technet.microsoft.com/Exemplo-de-utilizao-dos-9537c977

Page 32: Mocking Test - Outubro/2015

Dúvidas, sugestões???

Page 34: Mocking Test - Outubro/2015

Obrigado!!!


Top Related