SlideShare uma empresa Scribd logo
Mocks, Stubs e Fakes
ENTENDENDO O USO DESSAS ESTRUTURAS EM TESTES DE UNIDADE
Renato Groffe
◦ Microsoft Most Valuable Professional (MVP)
◦ Multi-Plataform Technical Audience Contributor
◦ Mais de 15 anos de experiência na área de Tecnologia
◦ Autor Técnico e Palestrante
◦ Um dos responsáveis pelo Canal .NET
Contatos
http://renatogroffe.net/
/renatogroffe /in/renatogroffe
/canaldotnet /renatogroffe
/@renato.groffe /renatogroff
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
◦ Fakes, Mocks e Stubs
◦ Exemplos práticos no Visual Studio 2017
Desenvolvimento de Software – Cenários comuns
Desenvolvimento – Cenários comuns
◦ Pressões por uma rápida entrega, prazos
muito curtos
Desenvolvimento – Cenários comuns
◦ Equipes reduzidas
Desenvolvimento – Cenários comuns
◦ Mudanças frequentes em requisitos
Desenvolvimento – Cenários Comuns
◦ Áreas de Negócio e Técnica nem sempre falam a mesma língua
Desenvolvimento – Cenários comuns
◦ Testes não são levados tão a sério
como se deveria
Como contornar estes problemas?
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:
◦ MS Test
◦ NUnit
◦ xUnit.net
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”
Como contornar estes problemas?
Ciclo de desenvolvimento em TDD → testes automatizados executados em
todos os estágios
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
Como contornar estes problemas?
BDD – Estrutura de
Uma User Story:
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
Sempre será fácil testar?
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
Como superar então estas dificuldades?
Simulando...
Imitando...
Algumas soluções para testes automatizados
Implementações fake
◦ Estruturas normalmente descartadas em produção
◦ Implementações contendo dados fixos e nenhuma
lógica
◦ Exemplo: utilização de um banco de dados “em
memória”
Algumas soluções para testes automatizados
Mock Objects
◦ Estruturas que simulam objetos reais
◦ Baseados em expectativas
◦ Enfatizam a interação entre objetos (comportamento),
prevendo inclusive possíveis falhas de execução
◦ Frameworks simplificam a utilização destas construções
Algumas soluções para testes automatizados
Stubs
◦ Estruturas com comportamento pré-determinado
◦ Podem fazer uso de implementações fake ou até
mesmo um framework para mock
◦ Não há a configuração de expectativas
Algumas considerações adicionais
◦ O termo dublê pode se referir a implementações fakes, mocks e stubs
◦ Temos também o conceito de objetos “dummy” (criados apenas para passagem de
parâmetros, sem uso posterior)
Um pouco de teoria
Mocks Aren't Stubs – Martin Fowler
https://martinfowler.com/articles/mocksArentStubs.html
Mocking Test 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
NSubstitute
◦ Framework também open source
◦ Alternativa ao uso do Moq, com um
funcionamento bastante semelhante ao deste
último
E como utilizar isso em .NET?
Combinando o uso do Moq ou Nsubstitute a frameworks como MS Test, NUnit, xUnit.net,
SpecFlow, Selenium, Fluent Assertions...
MS Test
Exemplo prático
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
Caso de Estudo
Recursos a serem utilizados
◦ Microsoft Visual Studio 2017
◦ .NET Core
◦ MS Test
◦ xUnit
◦ Moq
◦ NSubstitute
Fontes
https://github.com/renatogroffe/MockingTest_VS2017/
Obrigado!

Mais conteúdo relacionado

Mais procurados

Behavior-Driven Development (BDD) - Abril/2017
Behavior-Driven Development (BDD) - Abril/2017Behavior-Driven Development (BDD) - Abril/2017
Behavior-Driven Development (BDD) - Abril/2017
Renato Groff
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018
Renato Groff
 
Mocking Test
Mocking TestMocking Test
Mocking Test
Renato Groff
 
Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017
Renato Groff
 
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Renato Groffe
 
Testes de interfaces Web com Selenium
Testes de interfaces Web com SeleniumTestes de interfaces Web com Selenium
Testes de interfaces Web com Selenium
Renato Groff
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
PHP Day Curitiba
 
Testes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUGTestes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUG
beiraJUG
 
BDD JBehave
BDD JBehaveBDD JBehave
BDD JBehave
Ismael
 
C# 6.0 .net coders
C# 6.0   .net codersC# 6.0   .net coders
C# 6.0 .net coders
Renato Groff
 
Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Mocking Test - Outubro/2015
Mocking Test - Outubro/2015
Renato Groff
 
Bdd com spec flow
Bdd com spec flowBdd com spec flow
Bdd com spec flow
Cintia Armesto
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
Renato Groff
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
Renato Groff
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot framework
Claudenir Freitas
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)
Renato Groff
 
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDDPHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
Diana Ungaro Arnos
 
Testes: existe vida antes do TDD
Testes: existe vida antes do TDDTestes: existe vida antes do TDD
Testes: existe vida antes do TDD
Diana Ungaro Arnos
 
Testes Automatizados No Cakephp
Testes Automatizados No CakephpTestes Automatizados No Cakephp
Testes Automatizados No Cakephp
João José Pedrini
 

Mais procurados (19)

Behavior-Driven Development (BDD) - Abril/2017
Behavior-Driven Development (BDD) - Abril/2017Behavior-Driven Development (BDD) - Abril/2017
Behavior-Driven Development (BDD) - Abril/2017
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018
 
Mocking Test
Mocking TestMocking Test
Mocking Test
 
Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017
 
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
 
Testes de interfaces Web com Selenium
Testes de interfaces Web com SeleniumTestes de interfaces Web com Selenium
Testes de interfaces Web com Selenium
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
Testes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUGTestes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUG
 
BDD JBehave
BDD JBehaveBDD JBehave
BDD JBehave
 
C# 6.0 .net coders
C# 6.0   .net codersC# 6.0   .net coders
C# 6.0 .net coders
 
Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Mocking Test - Outubro/2015
Mocking Test - Outubro/2015
 
Bdd com spec flow
Bdd com spec flowBdd com spec flow
Bdd com spec flow
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot framework
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)
 
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDDPHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
 
Testes: existe vida antes do TDD
Testes: existe vida antes do TDDTestes: existe vida antes do TDD
Testes: existe vida antes do TDD
 
Testes Automatizados No Cakephp
Testes Automatizados No CakephpTestes Automatizados No Cakephp
Testes Automatizados No Cakephp
 

Semelhante a Mocks, Stubs e Fakes - Developers-SP - Julho-2017

BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
Renato Groff
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agile
Alini Rebonatto
 
Test-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding DayTest-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding Day
Renato Groff
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
Camilo Ribeiro
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
Renato Groff
 
Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018
Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018
Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018
Renato Groff
 
BDD com SpecFlow
BDD com SpecFlowBDD com SpecFlow
BDD com SpecFlow
Altamir Junior Dias
 
Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.net
Renato Groff
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
Isaac de Souza
 
Microsoft ALM = Produtividade
Microsoft ALM = ProdutividadeMicrosoft ALM = Produtividade
Microsoft ALM = Produtividade
Adriano Bertucci
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Domingos Teruel
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
Rafael Fuchs, PMP, MBA
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Renato Groff
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
Thiago Ghisi
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Renato Groff
 
Teste de Performance - 3º Encontro da ALATS
Teste de Performance - 3º Encontro da ALATSTeste de Performance - 3º Encontro da ALATS
Teste de Performance - 3º Encontro da ALATS
Fabrício Campos
 
Prototipação
PrototipaçãoPrototipação
Prototipação
Daniel Fernandes
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Renato Groffe
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
Kleitor Franklint Correa Araujo
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?
Igor Abade
 

Semelhante a Mocks, Stubs e Fakes - Developers-SP - Julho-2017 (20)

BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agile
 
Test-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding DayTest-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding Day
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
 
Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018
Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018
Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018
 
BDD com SpecFlow
BDD com SpecFlowBDD com SpecFlow
BDD com SpecFlow
 
Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.net
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
Microsoft ALM = Produtividade
Microsoft ALM = ProdutividadeMicrosoft ALM = Produtividade
Microsoft ALM = Produtividade
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
 
Teste de Performance - 3º Encontro da ALATS
Teste de Performance - 3º Encontro da ALATSTeste de Performance - 3º Encontro da ALATS
Teste de Performance - 3º Encontro da ALATS
 
Prototipação
PrototipaçãoPrototipação
Prototipação
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?
 

Mais de Renato Groff

Microsoft Azure role-based certifications valem a pena? | Interop Day Edição ...
Microsoft Azure role-based certifications valem a pena? | Interop Day Edição ...Microsoft Azure role-based certifications valem a pena? | Interop Day Edição ...
Microsoft Azure role-based certifications valem a pena? | Interop Day Edição ...
Renato Groff
 
Kubernetes: dicas e truques para o dia a dia | Azure Experts - Novembro-2020
Kubernetes: dicas e truques para o dia a dia | Azure Experts - Novembro-2020Kubernetes: dicas e truques para o dia a dia | Azure Experts - Novembro-2020
Kubernetes: dicas e truques para o dia a dia | Azure Experts - Novembro-2020
Renato Groff
 
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
Renato Groff
 
Como avançar na Power Platform com Azure Functions e Logic Apps | MVPConf Lat...
Como avançar na Power Platform com Azure Functions e Logic Apps | MVPConf Lat...Como avançar na Power Platform com Azure Functions e Logic Apps | MVPConf Lat...
Como avançar na Power Platform com Azure Functions e Logic Apps | MVPConf Lat...
Renato Groff
 
GitHub Actions: descomplicando o build/deployment automatizados | MVPConf Lat...
GitHub Actions: descomplicando o build/deployment automatizados | MVPConf Lat...GitHub Actions: descomplicando o build/deployment automatizados | MVPConf Lat...
GitHub Actions: descomplicando o build/deployment automatizados | MVPConf Lat...
Renato Groff
 
A evolução da plataforma .NET: passado, presente e futuro | Baixada NERD - No...
A evolução da plataforma .NET: passado, presente e futuro | Baixada NERD - No...A evolução da plataforma .NET: passado, presente e futuro | Baixada NERD - No...
A evolução da plataforma .NET: passado, presente e futuro | Baixada NERD - No...
Renato Groff
 
Polly: aplicações .NET resilientes e um melhor tratamento de falhas | MVPConf...
Polly: aplicações .NET resilientes e um melhor tratamento de falhas | MVPConf...Polly: aplicações .NET resilientes e um melhor tratamento de falhas | MVPConf...
Polly: aplicações .NET resilientes e um melhor tratamento de falhas | MVPConf...
Renato Groff
 
Containers no Azure: Docker, Kubernetes e suas diferentes possibilidades | MV...
Containers no Azure: Docker, Kubernetes e suas diferentes possibilidades | MV...Containers no Azure: Docker, Kubernetes e suas diferentes possibilidades | MV...
Containers no Azure: Docker, Kubernetes e suas diferentes possibilidades | MV...
Renato Groff
 
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
Renato Groff
 
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Renato Groff
 
.NET Core + Serverless: Desenvolvimento Multiplataforma com Azure Functions |...
.NET Core + Serverless: Desenvolvimento Multiplataforma com Azure Functions |....NET Core + Serverless: Desenvolvimento Multiplataforma com Azure Functions |...
.NET Core + Serverless: Desenvolvimento Multiplataforma com Azure Functions |...
Renato Groff
 
Aplicações Distribuídas com .NET | TDC Recife Online 2020
Aplicações Distribuídas com .NET | TDC Recife Online 2020Aplicações Distribuídas com .NET | TDC Recife Online 2020
Aplicações Distribuídas com .NET | TDC Recife Online 2020
Renato Groff
 
Novidades do .NET 5 e ASP.NET 5 | Visual Studio Summit 2020
Novidades do .NET 5 e ASP.NET 5 | Visual Studio Summit 2020Novidades do .NET 5 e ASP.NET 5 | Visual Studio Summit 2020
Novidades do .NET 5 e ASP.NET 5 | Visual Studio Summit 2020
Renato Groff
 
Serverless + Integrações com BDs: Azure Functions e Logic Apps - SQLSaturday ...
Serverless + Integrações com BDs: Azure Functions e Logic Apps - SQLSaturday ...Serverless + Integrações com BDs: Azure Functions e Logic Apps - SQLSaturday ...
Serverless + Integrações com BDs: Azure Functions e Logic Apps - SQLSaturday ...
Renato Groff
 
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
Renato Groff
 
.NET: passado, presente e futuro | Semana FCI 2020 - Mackenzie
.NET: passado, presente e futuro | Semana FCI 2020 - Mackenzie.NET: passado, presente e futuro | Semana FCI 2020 - Mackenzie
.NET: passado, presente e futuro | Semana FCI 2020 - Mackenzie
Renato Groff
 
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Renato Groff
 
Kubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
Kubernetes na Nuvem | Minicurso Gratuito - Azure na PráticaKubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
Kubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
Renato Groff
 
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Renato Groff
 
Sobrevoando os serviços do Azure | TDC São Paulo Online 2020
Sobrevoando os serviços do Azure | TDC São Paulo Online 2020Sobrevoando os serviços do Azure | TDC São Paulo Online 2020
Sobrevoando os serviços do Azure | TDC São Paulo Online 2020
Renato Groff
 

Mais de Renato Groff (20)

Microsoft Azure role-based certifications valem a pena? | Interop Day Edição ...
Microsoft Azure role-based certifications valem a pena? | Interop Day Edição ...Microsoft Azure role-based certifications valem a pena? | Interop Day Edição ...
Microsoft Azure role-based certifications valem a pena? | Interop Day Edição ...
 
Kubernetes: dicas e truques para o dia a dia | Azure Experts - Novembro-2020
Kubernetes: dicas e truques para o dia a dia | Azure Experts - Novembro-2020Kubernetes: dicas e truques para o dia a dia | Azure Experts - Novembro-2020
Kubernetes: dicas e truques para o dia a dia | Azure Experts - Novembro-2020
 
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
 
Como avançar na Power Platform com Azure Functions e Logic Apps | MVPConf Lat...
Como avançar na Power Platform com Azure Functions e Logic Apps | MVPConf Lat...Como avançar na Power Platform com Azure Functions e Logic Apps | MVPConf Lat...
Como avançar na Power Platform com Azure Functions e Logic Apps | MVPConf Lat...
 
GitHub Actions: descomplicando o build/deployment automatizados | MVPConf Lat...
GitHub Actions: descomplicando o build/deployment automatizados | MVPConf Lat...GitHub Actions: descomplicando o build/deployment automatizados | MVPConf Lat...
GitHub Actions: descomplicando o build/deployment automatizados | MVPConf Lat...
 
A evolução da plataforma .NET: passado, presente e futuro | Baixada NERD - No...
A evolução da plataforma .NET: passado, presente e futuro | Baixada NERD - No...A evolução da plataforma .NET: passado, presente e futuro | Baixada NERD - No...
A evolução da plataforma .NET: passado, presente e futuro | Baixada NERD - No...
 
Polly: aplicações .NET resilientes e um melhor tratamento de falhas | MVPConf...
Polly: aplicações .NET resilientes e um melhor tratamento de falhas | MVPConf...Polly: aplicações .NET resilientes e um melhor tratamento de falhas | MVPConf...
Polly: aplicações .NET resilientes e um melhor tratamento de falhas | MVPConf...
 
Containers no Azure: Docker, Kubernetes e suas diferentes possibilidades | MV...
Containers no Azure: Docker, Kubernetes e suas diferentes possibilidades | MV...Containers no Azure: Docker, Kubernetes e suas diferentes possibilidades | MV...
Containers no Azure: Docker, Kubernetes e suas diferentes possibilidades | MV...
 
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
 
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
 
.NET Core + Serverless: Desenvolvimento Multiplataforma com Azure Functions |...
.NET Core + Serverless: Desenvolvimento Multiplataforma com Azure Functions |....NET Core + Serverless: Desenvolvimento Multiplataforma com Azure Functions |...
.NET Core + Serverless: Desenvolvimento Multiplataforma com Azure Functions |...
 
Aplicações Distribuídas com .NET | TDC Recife Online 2020
Aplicações Distribuídas com .NET | TDC Recife Online 2020Aplicações Distribuídas com .NET | TDC Recife Online 2020
Aplicações Distribuídas com .NET | TDC Recife Online 2020
 
Novidades do .NET 5 e ASP.NET 5 | Visual Studio Summit 2020
Novidades do .NET 5 e ASP.NET 5 | Visual Studio Summit 2020Novidades do .NET 5 e ASP.NET 5 | Visual Studio Summit 2020
Novidades do .NET 5 e ASP.NET 5 | Visual Studio Summit 2020
 
Serverless + Integrações com BDs: Azure Functions e Logic Apps - SQLSaturday ...
Serverless + Integrações com BDs: Azure Functions e Logic Apps - SQLSaturday ...Serverless + Integrações com BDs: Azure Functions e Logic Apps - SQLSaturday ...
Serverless + Integrações com BDs: Azure Functions e Logic Apps - SQLSaturday ...
 
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
 
.NET: passado, presente e futuro | Semana FCI 2020 - Mackenzie
.NET: passado, presente e futuro | Semana FCI 2020 - Mackenzie.NET: passado, presente e futuro | Semana FCI 2020 - Mackenzie
.NET: passado, presente e futuro | Semana FCI 2020 - Mackenzie
 
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
 
Kubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
Kubernetes na Nuvem | Minicurso Gratuito - Azure na PráticaKubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
Kubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
 
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
 
Sobrevoando os serviços do Azure | TDC São Paulo Online 2020
Sobrevoando os serviços do Azure | TDC São Paulo Online 2020Sobrevoando os serviços do Azure | TDC São Paulo Online 2020
Sobrevoando os serviços do Azure | TDC São Paulo Online 2020
 

Mocks, Stubs e Fakes - Developers-SP - Julho-2017

  • 1. Mocks, Stubs e Fakes ENTENDENDO O USO DESSAS ESTRUTURAS EM TESTES DE UNIDADE
  • 2. Renato Groffe ◦ Microsoft Most Valuable Professional (MVP) ◦ Multi-Plataform Technical Audience Contributor ◦ Mais de 15 anos de experiência na área de Tecnologia ◦ Autor Técnico e Palestrante ◦ Um dos responsáveis pelo Canal .NET
  • 4. 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 ◦ Fakes, Mocks e Stubs ◦ Exemplos práticos no Visual Studio 2017
  • 5. Desenvolvimento de Software – Cenários comuns
  • 6. Desenvolvimento – Cenários comuns ◦ Pressões por uma rápida entrega, prazos muito curtos
  • 7. Desenvolvimento – Cenários comuns ◦ Equipes reduzidas
  • 8. Desenvolvimento – Cenários comuns ◦ Mudanças frequentes em requisitos
  • 9. Desenvolvimento – Cenários Comuns ◦ Áreas de Negócio e Técnica nem sempre falam a mesma língua
  • 10. Desenvolvimento – Cenários comuns ◦ Testes não são levados tão a sério como se deveria
  • 11. Como contornar estes problemas?
  • 12. 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: ◦ MS Test ◦ NUnit ◦ xUnit.net
  • 13. 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”
  • 14. Como contornar estes problemas? Ciclo de desenvolvimento em TDD → testes automatizados executados em todos os estágios
  • 15. 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
  • 16. Como contornar estes problemas? BDD – Estrutura de Uma User Story:
  • 17. 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
  • 19. 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
  • 20. Como superar então estas dificuldades?
  • 23. Algumas soluções para testes automatizados Implementações fake ◦ Estruturas normalmente descartadas em produção ◦ Implementações contendo dados fixos e nenhuma lógica ◦ Exemplo: utilização de um banco de dados “em memória”
  • 24. Algumas soluções para testes automatizados Mock Objects ◦ Estruturas que simulam objetos reais ◦ Baseados em expectativas ◦ Enfatizam a interação entre objetos (comportamento), prevendo inclusive possíveis falhas de execução ◦ Frameworks simplificam a utilização destas construções
  • 25. Algumas soluções para testes automatizados Stubs ◦ Estruturas com comportamento pré-determinado ◦ Podem fazer uso de implementações fake ou até mesmo um framework para mock ◦ Não há a configuração de expectativas
  • 26. Algumas considerações adicionais ◦ O termo dublê pode se referir a implementações fakes, mocks e stubs ◦ Temos também o conceito de objetos “dummy” (criados apenas para passagem de parâmetros, sem uso posterior)
  • 27. Um pouco de teoria Mocks Aren't Stubs – Martin Fowler https://martinfowler.com/articles/mocksArentStubs.html
  • 29. 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
  • 30. NSubstitute ◦ Framework também open source ◦ Alternativa ao uso do Moq, com um funcionamento bastante semelhante ao deste último
  • 31. E como utilizar isso em .NET? Combinando o uso do Moq ou Nsubstitute a frameworks como MS Test, NUnit, xUnit.net, SpecFlow, Selenium, Fluent Assertions... MS Test
  • 33. 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
  • 35. Recursos a serem utilizados ◦ Microsoft Visual Studio 2017 ◦ .NET Core ◦ MS Test ◦ xUnit ◦ Moq ◦ NSubstitute