SlideShare a Scribd company logo
1 of 18
MOQ – Tips and Tricks
1º MeetUp – Asp.Net Rio
QUEM EU SOU?
INFRA EVOLUTION
Marcus Leandro
Infra Evolution @ Stone
E-mail: mleandro@stone.com.br
GitHub: https://github.com/mvleandro
Twitter: @mvleandro
Blog: https://mvleandro.wordpress.com/
LinkedIn: https://www.linkedin.com/in/mvleandro/
SUA
FOTO
(STONE)
• O que é um Mock?
• Por que utilizar o Moq?
• Restrições de uso do Moq
• Principais usos
• Hands-on
• Dúvidas
AGENDA
INFRA EVOLUTION
O que é um Mock?
INFRA EVOLUTION
Mock é um objeto criado para testar comportamento de outro
objeto real.
• Simula/finge ser o objeto real através de operações
controladas;
• Garante um retorno previsível e válido;
O que é um Mock?
INFRA EVOLUTION
A utilização de objeto Mock está relacionada com o uso em testes de unidade, e é indicada
quando temos os seguintes cenários:
• Os objetos chamam algum recurso externo como uma Api, por exemplo;
• Os objetos fornecem resultados não determinísticos;
• Os objetos possuem estados que não são fáceis de criar ou reproduzir;
• A utilização dos objetos é muito lenta;
• Os objetos ainda não existem ou podem mudar de comportamento;
• Para realizar os testes você teria que incluir informações e métodos exclusivos para os
objetos.
O que é um Mock?
INFRA EVOLUTION
Existem três tipos de objetos simulados:
1. Fakes – São objetos mais simples que implementam a mesma interface dos objetos que
representam e retornam respostas pré-configuradas;
2. Mocks – São objetos pré-programados com informações que formam uma especificação
da chamadas que esperam receber;
3. Stubs – Providenciam respostas pré-configuradas para as chamadas feitas durante os
testes, em geral não respondem a nada que não esteja programado para o teste.
Stubs são usados para representar e testar o estado de um objeto e os Mocks são usados para testar
suas interações.
Por que utilizar o Moq?
INFRA EVOLUTION
• Aumentar a qualidade do seu código;
• Simples de usar;
• Fortemente tipado;
• Minimalista (embora altamente funcional);
• Declaração de comportamento através de Linq expressions.
Moq é um framework para mocar objetos em C#.
Restrições de uso do Moq
INFRA EVOLUTION
• Interfaces;
• Classes abstratas;
• Métodos virtuais.
Principais usos
INFRA EVOLUTION
Começando
Principais usos – Argumentos
INFRA EVOLUTION
Primeiro instanciamos um novo mock
para a interface IFoo.
Agora configuramos o comportamento para cada chamada de cada um dos métodos.
Principais usos – Propriedades
INFRA EVOLUTION
Aqui definimos um valor de retorno para os Gets.
Principais usos – Verificação
INFRA EVOLUTION
Podemos verificar se um determinado método foi chamado.
Principais usos – Callbacks
INFRA EVOLUTION
Configurando callbacks para verificações e lógicas
posteriores.
Principais usos – Alterando o comportamento
default
INFRA EVOLUTION
Configurando o Moq como um Mock real, lançando exceções quando um
comportamento não for configurado.
O comportamento padrão é Loose,
retornando valores default, arrays vazias,
etc, quando não tiver sido configurado.
Chamando a implementação base quando um comportamento não for
configurado.
Neste caso, a chamada padrão da classe mocada
será invocada em vez de retornar os valores
default.
Hands on
INFRA EVOLUTION
https://github.com/mvleandro/moq-presentation
Dúvidas
INFRA EVOLUTION
?
Referências
INFRA EVOLUTION
https://github.com/Moq/moq4/wiki/Quickstart
http://www.macoratti.net/15/08/net_mock1.htm
OBRIGADO!
Marcus Leandro
mleandro@stone.com.br
https://enter.stone.com.br

More Related Content

What's hot

Django Object factory
Django Object factoryDjango Object factory
Django Object factoryitalomaia
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de SoftwareMaurício Aniche
 
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 TDDDiana Ungaro Arnos
 
Testes: existe vida antes do TDD
Testes: existe vida antes do TDDTestes: existe vida antes do TDD
Testes: existe vida antes do TDDDiana Ungaro Arnos
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockitoRenan Uchôa
 
PHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de TestesPHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de TestesDiana Ungaro Arnos
 
Java não é tão difícil quanto parece
Java não é tão difícil quanto pareceJava não é tão difícil quanto parece
Java não é tão difícil quanto parecejesuinoPower
 
Testes O que são e para que servem? - LadyTalks
Testes O que são e para que servem? - LadyTalksTestes O que são e para que servem? - LadyTalks
Testes O que são e para que servem? - LadyTalksDiana Ungaro Arnos
 
Apresentação jasmine
Apresentação jasmineApresentação jasmine
Apresentação jasmineRangel Javier
 
Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETAlessandro Binhara
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot frameworkClaudenir Freitas
 
Certificação Java: Exceções
Certificação Java: ExceçõesCertificação Java: Exceções
Certificação Java: ExceçõesEduardo Mendes
 
[Curso Java Basico] Aula 17: Loop for
[Curso Java Basico] Aula 17:  Loop for[Curso Java Basico] Aula 17:  Loop for
[Curso Java Basico] Aula 17: Loop forLoiane Groner
 

What's hot (20)

POO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em JavaPOO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em Java
 
Tratamento de exceções em Java
Tratamento de exceções em JavaTratamento de exceções em Java
Tratamento de exceções em Java
 
Django Object factory
Django Object factoryDjango Object factory
Django Object factory
 
Java virtual machine quantas linguas fala a jvm2
Java virtual machine   quantas linguas fala a jvm2Java virtual machine   quantas linguas fala a jvm2
Java virtual machine quantas linguas fala a jvm2
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
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
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockito
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
 
PHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de TestesPHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de Testes
 
Java não é tão difícil quanto parece
Java não é tão difícil quanto pareceJava não é tão difícil quanto parece
Java não é tão difícil quanto parece
 
Testes O que são e para que servem? - LadyTalks
Testes O que são e para que servem? - LadyTalksTestes O que são e para que servem? - LadyTalks
Testes O que são e para que servem? - LadyTalks
 
JUnit Experience
JUnit ExperienceJUnit Experience
JUnit Experience
 
Apresentação jasmine
Apresentação jasmineApresentação jasmine
Apresentação jasmine
 
Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NET
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot framework
 
Certificação Java: Exceções
Certificação Java: ExceçõesCertificação Java: Exceções
Certificação Java: Exceções
 
[Curso Java Basico] Aula 17: Loop for
[Curso Java Basico] Aula 17:  Loop for[Curso Java Basico] Aula 17:  Loop for
[Curso Java Basico] Aula 17: Loop for
 

Similar to Moq - Tips and Tricks

Testes de Unidade - Unidade II
Testes de Unidade - Unidade IITestes de Unidade - Unidade II
Testes de Unidade - Unidade IIJoão Lourenço
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec ComIgor Rozani
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe munizMatheus de Lara Calache
 
Por que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticasPor que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticasLucas Caton
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junitcejug
 
Quando tdd não é o suficiente
Quando tdd não é o suficienteQuando tdd não é o suficiente
Quando tdd não é o suficienteCamilo Ribeiro
 
Testes E2E em Cypress com JS
Testes E2E em Cypress com JSTestes E2E em Cypress com JS
Testes E2E em Cypress com JSNàtali Cabral
 
Descomplicando os mocks
Descomplicando os mocksDescomplicando os mocks
Descomplicando os mocksDouglas Bastos
 
Mutant Testing: um mundo para um X-Tester participar.
Mutant Testing: um mundo para um X-Tester participar.Mutant Testing: um mundo para um X-Tester participar.
Mutant Testing: um mundo para um X-Tester participar.Robson Agapito Correa
 
Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Renato Groff
 
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 beiraJUGbeiraJUG
 
Um melhor frontend com elm
Um melhor frontend com elmUm melhor frontend com elm
Um melhor frontend com elmLucas Teles
 
Primeiros passos com splinter - PySM
Primeiros passos com splinter - PySMPrimeiros passos com splinter - PySM
Primeiros passos com splinter - PySMAdriano Margarin
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDDDextra
 
Brownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiênciasBrownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiênciasEmmanuel Gomes Brandão
 

Similar to Moq - Tips and Tricks (20)

Testes de Unidade - Unidade II
Testes de Unidade - Unidade IITestes de Unidade - Unidade II
Testes de Unidade - Unidade II
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec Com
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
 
Xamarin UI Test + BDD Specflow
Xamarin UI Test + BDD SpecflowXamarin UI Test + BDD Specflow
Xamarin UI Test + BDD Specflow
 
Por que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticasPor que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticas
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Quando tdd não é o suficiente
Quando tdd não é o suficienteQuando tdd não é o suficiente
Quando tdd não é o suficiente
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Xamarin UI Test e VS Mobile Center
Xamarin UI Test e VS Mobile CenterXamarin UI Test e VS Mobile Center
Xamarin UI Test e VS Mobile Center
 
Testes E2E em Cypress com JS
Testes E2E em Cypress com JSTestes E2E em Cypress com JS
Testes E2E em Cypress com JS
 
Descomplicando os mocks
Descomplicando os mocksDescomplicando os mocks
Descomplicando os mocks
 
Mutant Testing: um mundo para um X-Tester participar.
Mutant Testing: um mundo para um X-Tester participar.Mutant Testing: um mundo para um X-Tester participar.
Mutant Testing: um mundo para um X-Tester participar.
 
Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
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
 
Um melhor frontend com elm
Um melhor frontend com elmUm melhor frontend com elm
Um melhor frontend com elm
 
Primeiros passos com splinter - PySM
Primeiros passos com splinter - PySMPrimeiros passos com splinter - PySM
Primeiros passos com splinter - PySM
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 
Testes unitários e Mocks
Testes unitários e MocksTestes unitários e Mocks
Testes unitários e Mocks
 
Brownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiênciasBrownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiências
 

Moq - Tips and Tricks

  • 1. MOQ – Tips and Tricks 1º MeetUp – Asp.Net Rio
  • 2. QUEM EU SOU? INFRA EVOLUTION Marcus Leandro Infra Evolution @ Stone E-mail: mleandro@stone.com.br GitHub: https://github.com/mvleandro Twitter: @mvleandro Blog: https://mvleandro.wordpress.com/ LinkedIn: https://www.linkedin.com/in/mvleandro/ SUA FOTO (STONE)
  • 3. • O que é um Mock? • Por que utilizar o Moq? • Restrições de uso do Moq • Principais usos • Hands-on • Dúvidas AGENDA INFRA EVOLUTION
  • 4. O que é um Mock? INFRA EVOLUTION Mock é um objeto criado para testar comportamento de outro objeto real. • Simula/finge ser o objeto real através de operações controladas; • Garante um retorno previsível e válido;
  • 5. O que é um Mock? INFRA EVOLUTION A utilização de objeto Mock está relacionada com o uso em testes de unidade, e é indicada quando temos os seguintes cenários: • Os objetos chamam algum recurso externo como uma Api, por exemplo; • Os objetos fornecem resultados não determinísticos; • Os objetos possuem estados que não são fáceis de criar ou reproduzir; • A utilização dos objetos é muito lenta; • Os objetos ainda não existem ou podem mudar de comportamento; • Para realizar os testes você teria que incluir informações e métodos exclusivos para os objetos.
  • 6. O que é um Mock? INFRA EVOLUTION Existem três tipos de objetos simulados: 1. Fakes – São objetos mais simples que implementam a mesma interface dos objetos que representam e retornam respostas pré-configuradas; 2. Mocks – São objetos pré-programados com informações que formam uma especificação da chamadas que esperam receber; 3. Stubs – Providenciam respostas pré-configuradas para as chamadas feitas durante os testes, em geral não respondem a nada que não esteja programado para o teste. Stubs são usados para representar e testar o estado de um objeto e os Mocks são usados para testar suas interações.
  • 7. Por que utilizar o Moq? INFRA EVOLUTION • Aumentar a qualidade do seu código; • Simples de usar; • Fortemente tipado; • Minimalista (embora altamente funcional); • Declaração de comportamento através de Linq expressions. Moq é um framework para mocar objetos em C#.
  • 8. Restrições de uso do Moq INFRA EVOLUTION • Interfaces; • Classes abstratas; • Métodos virtuais.
  • 10. Principais usos – Argumentos INFRA EVOLUTION Primeiro instanciamos um novo mock para a interface IFoo. Agora configuramos o comportamento para cada chamada de cada um dos métodos.
  • 11. Principais usos – Propriedades INFRA EVOLUTION Aqui definimos um valor de retorno para os Gets.
  • 12. Principais usos – Verificação INFRA EVOLUTION Podemos verificar se um determinado método foi chamado.
  • 13. Principais usos – Callbacks INFRA EVOLUTION Configurando callbacks para verificações e lógicas posteriores.
  • 14. Principais usos – Alterando o comportamento default INFRA EVOLUTION Configurando o Moq como um Mock real, lançando exceções quando um comportamento não for configurado. O comportamento padrão é Loose, retornando valores default, arrays vazias, etc, quando não tiver sido configurado. Chamando a implementação base quando um comportamento não for configurado. Neste caso, a chamada padrão da classe mocada será invocada em vez de retornar os valores default.