mocking test - outubro/2015

Download Mocking Test - Outubro/2015

Post on 21-Jan-2017

488 views

Category:

Software

1 download

Embed Size (px)

TRANSCRIPT

Mocking TestRenato GroffeOutubro/2015

1

Apresentao Renato Groffe

Mais de 15 anos de experincia na rea de Tecnologia

Ps-graduao em Engenharia de Software nfase em SOA

Cursando MBA em Business Intelligence (FIAP)

Graduao em Sistemas de Informao

Tcnico em Processamento de Dados

MTAC (Microsoft Technical Audience Contributor), MCP, Microsoft Specialist, MCTS, OCA, ITIL, COBIT

2

ContatosPgina no Facebookhttps://www.facebook.com/RenatoGroffeSW

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

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

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

3

Recursos UtilizadosVisual Studio 2013 (preferencialmente com o Update 5) / Visual Studio Community 2015

Moq

NSubstitute

Visual Studio Unit Testing Framework (tambm conhecido como MS Test)

4

Cenrios comuns dentro do desenvolvimento de software

Testes unitrios, TDD, BDD: uma viso geral

Dificuldades tcnicas na implementao e execuo de testes unitrios

Mocking Test

Implementao de um exemplo prtico em .NETAgenda

5

Software: esperado x entregue

6

Desenvolvimento de Software atualmente...

7

Testes so realmente vistos como algo importante?

8

Desenvolvimento de Software Cenrios ComunsPresses por rpida entrega

Prazos muito curtos

Equipes reduzidas

Mudanas frequentes em requisitos

reas de Negcio e Tcnica no falam mesma lngua

Testes no so levados to a srio como se deveria

9

Como contornar estes problemas?Metodologias geisXP (Extreme Programming) e Scrum so os exemplos mais famosos

Testes unitrios automatizadosValidaes em objetos e mtodos (unidades)

Alternativas na plataforma .NET:Visual Studio Unit Testing Framework (MS Test)NUnit (http://www.nunit.org/)xUnit.net (https://github.com/xunit)

10

Como contornar estes problemas?TDD Test-Driven Development

Testes unitrios codificados antes mesmo da implementao das partes que sero submetidas a anlises evita-se assim a elaborao de testes viciados

11

Como contornar estes problemas?BDD Behavior-Driven Development

Testes baseados em user stories (histrias)

Vocabulrio compartilhado entre reas de negcio e tcnica (linguagem ubqua)

Frameworks permitem que as user stories sejam executadas como testes automatizados uma alternativa muito utilizada em .NET o SpecFlow

12

Ciclo de desenvolvimento em TDDA implementao de uma funcionalidade segue um ciclo chamado Red-Green-Refactor (os testes unitrios so executados em todos os estgios)

13

BDD Estrutura de uma User Story

14

Ciclo de Desenvolvimento em BDDTeste de aceitao User story que serve de base para a implementao de uma funcionalidade e posterior validao da mesma

15

Sempre ser fcil testar?

16

Dificuldades tcnicas comunsDependncias entre diferentes partes de um software

Inexistncia de ambientes com configuraes especficas para testes

Integraes com parceiros que no disponibilizam condies adequadas para testes

17

Soluo? Simular!!!

18

Ou imitar...

19

Solucionando estas dificuldades em testes unitrios

Fake objects implementaes para a gerao de objetos necessrios, porm descartadas em produo

Mocks enfatizam a interao entre objetos (comportamento), com possveis falhas de execuo

20

Como implementar isto simplificadamente em .NET?Moq

Framework open source

Simplifica a utilizao de Mocks na validao de solues construdas em .NET

Permite definir o retorno de mtodos, propriedades e at a gerao de excees em tempo de execuo

Dispensa a criao de Fakes e outras estruturas que seriam descartadas posteriormente

21

Como implementar isto simplificadamente em .NET?NSubstitute

Framework tambm open source

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

22

Exemplo prtico Mocking TestConsulta a um servio de crdito (via CPF) status possveis:

Parmetro de envio invlido (retorno de pendncias = null)

Erro de comunicao (exceo retornada ao se invocar o servio)

Pessoa fsica sem Pendncias (zero itens no retorno de pendncias)

Pessoa fsica inadimplente (ao menos uma pendncia encontrada)

A ideia por trs do uso de Mock Objects nesta situao evitar consultas a um tipo de servio que pago as empresas que fornecem os dados no costumam disponibilizar ambientes para testes

23

Exemplo prtico Mocking TestRepresentao esquemtica das classes a serem utilizadas:

24

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

25

Como utilizar o Moq?Utilizar a classe genrica Mock em conjunto com o tipo a ser simulado (normalmente uma interface)

Mtodo Setup configura o mtodo ou propriedade a ser simuladoMtodo Returns retorno a ser devolvido pelo elemento que se est simulandoMtodo Throws exceo que ocorre ao se invocar um mtodo ou propriedade

Acessar a propriedade Object da instncia genrica do tipo Mock, a fim de obter a referncia que simula um comportamento

26

Como utilizar o Moq?Alguns exemplos sobre como configurar um Mock Object (uma referncia mais completa pode ser encontra no site do Moq):

27

Como utilizar o NSubstitute?Estruturas definidas no namespace NSubstitute

Tambm importar no projeto de testes o package deste framework que se encontra no NuGet

Tambm empregado em conjunto com frameworks como MS Test, Nunit, xUnit.net, SpecFlow

28

Como utilizar o NSubstitute?Utilizar o mtodo genrico For da classe Substitute em conjunto com o tipo a ser simulado (normalmente uma interface)

Mtodo Returns retorno a ser devolvido pelo elemento que se est simulando (valor ou exceo)

O objeto retornado pelo mtodo For ser o mesmo que servir de base para a simulao de um comportamento

29

Como utilizar o NSubstitute?Exemplo sobre como configurar um Mock Object (uma referncia mais completa pode ser encontra no site do NSubstitute):

30

Fontes utilizados nesta apresentaoLink para download da soluo de exemplo:

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

31

Dvidas, sugestes???

32

Referncias

Mocks no so Stubshttp://www.infoq.com/br/articles/mocks-Arent-Stubs

Moq Quickstarthttps://github.com/Moq/moq4/wiki/Quickstart

NSubstitute: Docs and getting helphttp://nsubstitute.github.io/help.html

Unit Testing with Mock Objectshttps://msdn.microsoft.com/en-us/library/ff650441.aspx

33

Obrigado!!!

34