SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Testes e Mock´s
Razões e problemas
 Difícil manter
 Difícil evoluir
 Bugs persistentes
 Correção gera outros bugs
 Medo de mexer no código
 Perda de tempo
O que são testes
 Forma de garantir que o software funciona
◦ Atende aos propósitos de negócio
◦ Funciona como esperado
 Maneira verificável de garantir que o
software atende „as necessidades de
negócio e que funciona como esperado
Testers
 São importantes
 Executar a aplicação demora
 Feedback demora
 Bom para encontrar bugs
 Código construído sobre bug gera mais
bugs
Por que não testar ?
 Demora..
 Eu sou senior..
 Estamos sem tempo ..
Por que não testar?
 Acredite: você não é o bom o bastante!!
 Testar pode consumir tempo, mas é
necessário.
 Deixar de testar não te faz mais rápido,
dá apenas uma falsa sensação de
velocidade.
Produtividade ao longo do tempo
Uncle Bob (Robert C. Martin)
“Desenvolvedores que não
testa é como um cirurgião que
não lava as mãos”
Uncle Bob (Robert C. Martin)
O que é um teste unitário?
 Pedaço de código que executa outro
pedaço de código.
 Verifica se tudo esta correto
 Teste uma coisa por vez
 Não toque em nada externo (DB,file, etc)
 É um trabalho do desenvolvedor
 Escreva e vá refatorando código
Benefícios dos testes unitários
 Pequeno, justo, dissociado
 Executam de forma automatizada
 São repetíveis
 Qualquer um pode executar
 Provém FeedBack quase instantâneo
 Refatoração segura
 Documenta os requisitos
 Permite a integração contuínua
Benefícios dos testes unitários
 O valor dos teste aumenta com o tempo
 Auxiliam o design da funcionalidade
◦ Escrever teste tem de ser fácil
◦ Esta difícil ? Esta errado!! Refatore
 Ajudam a realizar alterações
 Ajudam com regressões
◦ Algo que funcionava e não funciona mais
Units Test
 E as desvantagens ....
Quando escrever os teste
Antes (TDD, BFF) Depois/Durante code
 Foco no requerimento
 Pensa sobre como o
código será
consumido
 Para de codificar
quando requerimento
é encontrado
 Difícil inicialmente
 Foco no código
 Pensa no algoritmo
 Mais refatoração é
necessária
 Fácil de iniciar
Quando escrever os teste
Antes (TDD, BFF) Depois/Durante code
 Foco no requerimento
 Pensa sobre como o
código será
consumido
 Para de codificar
quando requerimento
é encontrado
 Difícil inicialmente
 Foco no código
 Pensa no algorítimo
 Mais refatoração é
necessária
 Fácil de iniciar
Anatomia AAA
 Teste são curtos seguem o padrão AAA
 Arrange
◦ Setup de código e pré-requisitos, prepara o
ambiente para o teste
◦ Configura as variáveis, objetos, monta relações
◦ Em algumas situações o Arrange pode ser
reaproveitado
◦ Exercita o método em teste
 [Setup]
 [TestInitialise]
 [FixtureSetup]
Arrange Extenso
Anatomia AAA
 ACT
◦ É execução do SUT
◦ É a chamada para o método que esta sendo
testado
◦ É a execução da operação a ser testada
◦ Um teste deve atuar independente dos outros
◦ Um Act com muitos métodos é sinal de
problema
Anatomia AAA
 Assert
◦ É a verificação do resultado
◦ Neste ponto faz-se a análise do resultado do
ACT como era esperado
◦ Um teste no geral tem apenas Um Assert
◦ Mais de um Assert no teste mascara erros
 Frameworks de Teste
◦ NUNIT
◦ Portado no junit
◦ 100% escrito em C#
◦ Um dos frameworks mais usados
◦ Interface Fluentes
◦ Asseções mais legíveis
◦ Mais opções de Asserções
Coloque para fora as dependencias
 Envolva a dependência com uma
Interface
 Crie um campo privado tipo de interface
 Adicione a interface com argumento no
construtor
 Assimile o campo privado ao argumento
no construtor
 Use um novo campo privado no código
TDD
 Basicamente deve se seguir o mantra:
◦ RED, GREEN , Refactor
 Escreva um teste que falhe
 Faça o teste passar
 Refatore/melhore o código
TDD
 Escrever os teste antes do código de
produção
 Escrever código que o teste pediu
 Resultados
◦ Teste
◦ Melhor design
 Menos acoplamento
 Classes e métodos coesos
 Clareza no código
 Por que teste ante?
◦ O teste é o primeiro cliente do seu código
◦ Faça como você gostaria que fosse
Exemplo de código
ERP
O que é Mocking?
 Cria objetos falsos para você
 Coloque e inspecione os valores no objeto
falso
 Inspecione os métodos chamados e
argumentos no objeto falso
Stub vs Mock
 Server para gerenciamos dependências
nos testes
 Ambos são objetos fake, “imitam” objetos
reais
 São muito parecidos mas têm propósitos
diferentes
Stubs
 Substitui de forma controlável uma
dependências externas
 Mantém o teste em nossas mãos
◦ Repetível
◦ Rápido
◦ Isolado
 Um stub não fará o teste falhar
 Asserts não são feitos contra os Stubs
 Fornece algum estado para o SUT
Mocks
 É um objeto que reage às interações com
o SUT
 Tem poder para falhar o teste
 Assert é realizado contra o mock
 Um mock por teste
◦ SRP até no teste!!!!
Stub vs Mock
STUB MOCK
 GET/SET proriedades
 Set metodos e
retorna valores
 Testa o estado!
 Checa a chamada de
métodos
 Checa os argumentos
usados
 Testa Interações!
Stubs e Mocks
 Indispensáveis
 Sem eles testar é doloroso e custoso
 Criá-los na mão é doloroso e custoso
 Gera muito retrabalho
 Gasta-se muito tempo
 Testar fica chato
Framework de Mock
 Frameworks de isolamento
 Criam Mocks e Stubs de forma simples
 Não há retrabalho
 Lidam com vários tipos de configuração
sem causar odores
 Frameworks
◦ Rhino.Mocks
◦ Typemock Isolator
◦ Moq

Weitere ähnliche Inhalte

Was ist angesagt?

Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Iure Guimaraes
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosDionatan default
 
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
 
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Thiago Barradas
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Raphael Paiva
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizadosThiago Ghisi
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesEverton Rodrigues
 
Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Rômulo Augusto Santos
 
Boas práticas com TDD
Boas práticas com TDD Boas práticas com TDD
Boas práticas com TDD Camilo Lopes
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmáticaelliando dias
 
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 de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - JavaneirosTestes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - JavaneirosRenan Siravegna
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 

Was ist angesagt? (20)

Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anos
 
Testes - Para que?
Testes - Para que?Testes - Para que?
Testes - Para que?
 
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
 
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
 
O poder do TDD
O poder do TDDO poder do TDD
O poder do TDD
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por Testes
 
Clean Code
Clean CodeClean Code
Clean Code
 
Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.
 
BDD em Ação - Testadores 2015
BDD em Ação - Testadores 2015BDD em Ação - Testadores 2015
BDD em Ação - Testadores 2015
 
Boas práticas com TDD
Boas práticas com TDD Boas práticas com TDD
Boas práticas com TDD
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmática
 
Quando tdd não é o suficiente
Quando tdd não é o suficienteQuando tdd não é o suficiente
Quando tdd não é o suficiente
 
Testes de a a z
Testes de a a zTestes de a a z
Testes de a a z
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
 
Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - JavaneirosTestes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 

Ähnlich wie Testes e Mocks: Benefícios e boas práticas

In tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e maisIn tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e maisAna Paula Gomes
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaRogerio Fontes
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareDextra Sistemas / Etec Itu
 
TDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian CunhaTDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian CunhaChristian Cunha
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Thiago Faria de Andrade
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingPedro Pereira Martins
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Maurício Aniche
 
Desenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesDesenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesAndre Carlucci
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaRafael Ponte
 

Ähnlich wie Testes e Mocks: Benefícios e boas práticas (20)

In tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e maisIn tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e mais
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
 
RealDay: Introduction to TDD
RealDay: Introduction to TDDRealDay: Introduction to TDD
RealDay: Introduction to TDD
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Pensando TDD
Pensando TDDPensando TDD
Pensando TDD
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
TDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian CunhaTDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian Cunha
 
Introdução a TDD
Introdução a TDDIntrodução a TDD
Introdução a TDD
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Testes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicandoTestes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicando
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCasting
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
Clean code
Clean codeClean code
Clean code
 
Desenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesDesenvolvimento Orientado a Testes
Desenvolvimento Orientado a Testes
 
Desenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por TestesDesenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por Testes
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresa
 

Mehr von Alessandro Binhara

Uma breve introdução ao Big Data e Inteligência Artificial.pptx
Uma breve introdução ao Big Data e Inteligência Artificial.pptxUma breve introdução ao Big Data e Inteligência Artificial.pptx
Uma breve introdução ao Big Data e Inteligência Artificial.pptxAlessandro Binhara
 
BigData e internte das coisas aplicada a engenharia
BigData e internte das coisas aplicada a engenhariaBigData e internte das coisas aplicada a engenharia
BigData e internte das coisas aplicada a engenhariaAlessandro Binhara
 
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnósticaCase RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnósticaAlessandro Binhara
 
Latinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jediLatinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jediAlessandro Binhara
 
2019 latinoware - O mundo novo da realidade virtual
2019 latinoware - O mundo novo da realidade virtual2019 latinoware - O mundo novo da realidade virtual
2019 latinoware - O mundo novo da realidade virtualAlessandro Binhara
 
Realidade Virtual e a Ciência de Dados -latinoware
Realidade Virtual e a Ciência de Dados -latinowareRealidade Virtual e a Ciência de Dados -latinoware
Realidade Virtual e a Ciência de Dados -latinowareAlessandro Binhara
 
Realidade Virtual e a Ciência de Dados
Realidade Virtual e a Ciência de DadosRealidade Virtual e a Ciência de Dados
Realidade Virtual e a Ciência de DadosAlessandro Binhara
 
A IMPORTÂNCIA DA PARTICIPAÇÃO NA GESTÃO DE PROJETOS TECNOLÓGICOS INOVADORES:...
A IMPORTÂNCIA DA PARTICIPAÇÃO NA  GESTÃO DE PROJETOS TECNOLÓGICOS INOVADORES:...A IMPORTÂNCIA DA PARTICIPAÇÃO NA  GESTÃO DE PROJETOS TECNOLÓGICOS INOVADORES:...
A IMPORTÂNCIA DA PARTICIPAÇÃO NA GESTÃO DE PROJETOS TECNOLÓGICOS INOVADORES:...Alessandro Binhara
 
BIG DATA & IoT: Tecnologias e  Aplicações
BIG DATA & IoT: Tecnologias e  AplicaçõesBIG DATA & IoT: Tecnologias e  Aplicações
BIG DATA & IoT: Tecnologias e  AplicaçõesAlessandro Binhara
 
Introduçãoo aws, escalando uma aplicação Web
Introduçãoo aws, escalando uma aplicação WebIntroduçãoo aws, escalando uma aplicação Web
Introduçãoo aws, escalando uma aplicação WebAlessandro Binhara
 
Desenvolvimento de Games para Mobile.
Desenvolvimento de Games para Mobile.Desenvolvimento de Games para Mobile.
Desenvolvimento de Games para Mobile.Alessandro Binhara
 
Curso C# em Mono - Orientação a Objeto Basico
Curso C# em Mono - Orientação a Objeto BasicoCurso C# em Mono - Orientação a Objeto Basico
Curso C# em Mono - Orientação a Objeto BasicoAlessandro Binhara
 
Apresentação Final a FINEP Projeto MonoBasic
Apresentação Final a FINEP Projeto MonoBasicApresentação Final a FINEP Projeto MonoBasic
Apresentação Final a FINEP Projeto MonoBasicAlessandro Binhara
 

Mehr von Alessandro Binhara (20)

Uma breve introdução ao Big Data e Inteligência Artificial.pptx
Uma breve introdução ao Big Data e Inteligência Artificial.pptxUma breve introdução ao Big Data e Inteligência Artificial.pptx
Uma breve introdução ao Big Data e Inteligência Artificial.pptx
 
BigData e internte das coisas aplicada a engenharia
BigData e internte das coisas aplicada a engenhariaBigData e internte das coisas aplicada a engenharia
BigData e internte das coisas aplicada a engenharia
 
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnósticaCase RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
 
Latinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jediLatinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jedi
 
2019 latinoware - O mundo novo da realidade virtual
2019 latinoware - O mundo novo da realidade virtual2019 latinoware - O mundo novo da realidade virtual
2019 latinoware - O mundo novo da realidade virtual
 
Realidade Virtual e a Ciência de Dados -latinoware
Realidade Virtual e a Ciência de Dados -latinowareRealidade Virtual e a Ciência de Dados -latinoware
Realidade Virtual e a Ciência de Dados -latinoware
 
Realidade Virtual e a Ciência de Dados
Realidade Virtual e a Ciência de DadosRealidade Virtual e a Ciência de Dados
Realidade Virtual e a Ciência de Dados
 
A IMPORTÂNCIA DA PARTICIPAÇÃO NA GESTÃO DE PROJETOS TECNOLÓGICOS INOVADORES:...
A IMPORTÂNCIA DA PARTICIPAÇÃO NA  GESTÃO DE PROJETOS TECNOLÓGICOS INOVADORES:...A IMPORTÂNCIA DA PARTICIPAÇÃO NA  GESTÃO DE PROJETOS TECNOLÓGICOS INOVADORES:...
A IMPORTÂNCIA DA PARTICIPAÇÃO NA GESTÃO DE PROJETOS TECNOLÓGICOS INOVADORES:...
 
Curso de Férias - Robótica
Curso de Férias -  Robótica Curso de Férias -  Robótica
Curso de Férias - Robótica
 
BIG DATA & IoT: Tecnologias e  Aplicações
BIG DATA & IoT: Tecnologias e  AplicaçõesBIG DATA & IoT: Tecnologias e  Aplicações
BIG DATA & IoT: Tecnologias e  Aplicações
 
Introduçãoo aws, escalando uma aplicação Web
Introduçãoo aws, escalando uma aplicação WebIntroduçãoo aws, escalando uma aplicação Web
Introduçãoo aws, escalando uma aplicação Web
 
Bigadata casese opotunidades
Bigadata casese opotunidadesBigadata casese opotunidades
Bigadata casese opotunidades
 
Xamarin plataform
Xamarin plataformXamarin plataform
Xamarin plataform
 
Desenvolvimento de Games para Mobile.
Desenvolvimento de Games para Mobile.Desenvolvimento de Games para Mobile.
Desenvolvimento de Games para Mobile.
 
Games imersivos
Games imersivosGames imersivos
Games imersivos
 
Abertura - interopmix2014
Abertura - interopmix2014Abertura - interopmix2014
Abertura - interopmix2014
 
Curso C# em Mono - Orientação a Objeto Basico
Curso C# em Mono - Orientação a Objeto BasicoCurso C# em Mono - Orientação a Objeto Basico
Curso C# em Mono - Orientação a Objeto Basico
 
Treinamento csharp mono
Treinamento csharp monoTreinamento csharp mono
Treinamento csharp mono
 
Int305 projeto mono-final
Int305 projeto mono-finalInt305 projeto mono-final
Int305 projeto mono-final
 
Apresentação Final a FINEP Projeto MonoBasic
Apresentação Final a FINEP Projeto MonoBasicApresentação Final a FINEP Projeto MonoBasic
Apresentação Final a FINEP Projeto MonoBasic
 

Testes e Mocks: Benefícios e boas práticas

  • 2. Razões e problemas  Difícil manter  Difícil evoluir  Bugs persistentes  Correção gera outros bugs  Medo de mexer no código  Perda de tempo
  • 3. O que são testes  Forma de garantir que o software funciona ◦ Atende aos propósitos de negócio ◦ Funciona como esperado  Maneira verificável de garantir que o software atende „as necessidades de negócio e que funciona como esperado
  • 4. Testers  São importantes  Executar a aplicação demora  Feedback demora  Bom para encontrar bugs  Código construído sobre bug gera mais bugs
  • 5. Por que não testar ?  Demora..  Eu sou senior..  Estamos sem tempo ..
  • 6. Por que não testar?  Acredite: você não é o bom o bastante!!  Testar pode consumir tempo, mas é necessário.  Deixar de testar não te faz mais rápido, dá apenas uma falsa sensação de velocidade.
  • 8. Uncle Bob (Robert C. Martin) “Desenvolvedores que não testa é como um cirurgião que não lava as mãos”
  • 9. Uncle Bob (Robert C. Martin)
  • 10. O que é um teste unitário?  Pedaço de código que executa outro pedaço de código.  Verifica se tudo esta correto  Teste uma coisa por vez  Não toque em nada externo (DB,file, etc)  É um trabalho do desenvolvedor  Escreva e vá refatorando código
  • 11. Benefícios dos testes unitários  Pequeno, justo, dissociado  Executam de forma automatizada  São repetíveis  Qualquer um pode executar  Provém FeedBack quase instantâneo  Refatoração segura  Documenta os requisitos  Permite a integração contuínua
  • 12. Benefícios dos testes unitários  O valor dos teste aumenta com o tempo  Auxiliam o design da funcionalidade ◦ Escrever teste tem de ser fácil ◦ Esta difícil ? Esta errado!! Refatore  Ajudam a realizar alterações  Ajudam com regressões ◦ Algo que funcionava e não funciona mais
  • 13. Units Test  E as desvantagens ....
  • 14. Quando escrever os teste Antes (TDD, BFF) Depois/Durante code  Foco no requerimento  Pensa sobre como o código será consumido  Para de codificar quando requerimento é encontrado  Difícil inicialmente  Foco no código  Pensa no algoritmo  Mais refatoração é necessária  Fácil de iniciar
  • 15. Quando escrever os teste Antes (TDD, BFF) Depois/Durante code  Foco no requerimento  Pensa sobre como o código será consumido  Para de codificar quando requerimento é encontrado  Difícil inicialmente  Foco no código  Pensa no algorítimo  Mais refatoração é necessária  Fácil de iniciar
  • 16. Anatomia AAA  Teste são curtos seguem o padrão AAA  Arrange ◦ Setup de código e pré-requisitos, prepara o ambiente para o teste ◦ Configura as variáveis, objetos, monta relações ◦ Em algumas situações o Arrange pode ser reaproveitado ◦ Exercita o método em teste  [Setup]  [TestInitialise]  [FixtureSetup]
  • 18. Anatomia AAA  ACT ◦ É execução do SUT ◦ É a chamada para o método que esta sendo testado ◦ É a execução da operação a ser testada ◦ Um teste deve atuar independente dos outros ◦ Um Act com muitos métodos é sinal de problema
  • 19. Anatomia AAA  Assert ◦ É a verificação do resultado ◦ Neste ponto faz-se a análise do resultado do ACT como era esperado ◦ Um teste no geral tem apenas Um Assert ◦ Mais de um Assert no teste mascara erros
  • 20.  Frameworks de Teste ◦ NUNIT ◦ Portado no junit ◦ 100% escrito em C# ◦ Um dos frameworks mais usados ◦ Interface Fluentes ◦ Asseções mais legíveis ◦ Mais opções de Asserções
  • 21. Coloque para fora as dependencias  Envolva a dependência com uma Interface  Crie um campo privado tipo de interface  Adicione a interface com argumento no construtor  Assimile o campo privado ao argumento no construtor  Use um novo campo privado no código
  • 22. TDD  Basicamente deve se seguir o mantra: ◦ RED, GREEN , Refactor  Escreva um teste que falhe  Faça o teste passar  Refatore/melhore o código
  • 23. TDD  Escrever os teste antes do código de produção  Escrever código que o teste pediu  Resultados ◦ Teste ◦ Melhor design  Menos acoplamento  Classes e métodos coesos  Clareza no código  Por que teste ante? ◦ O teste é o primeiro cliente do seu código ◦ Faça como você gostaria que fosse
  • 25. O que é Mocking?  Cria objetos falsos para você  Coloque e inspecione os valores no objeto falso  Inspecione os métodos chamados e argumentos no objeto falso
  • 26. Stub vs Mock  Server para gerenciamos dependências nos testes  Ambos são objetos fake, “imitam” objetos reais  São muito parecidos mas têm propósitos diferentes
  • 27. Stubs  Substitui de forma controlável uma dependências externas  Mantém o teste em nossas mãos ◦ Repetível ◦ Rápido ◦ Isolado  Um stub não fará o teste falhar  Asserts não são feitos contra os Stubs  Fornece algum estado para o SUT
  • 28. Mocks  É um objeto que reage às interações com o SUT  Tem poder para falhar o teste  Assert é realizado contra o mock  Um mock por teste ◦ SRP até no teste!!!!
  • 29. Stub vs Mock STUB MOCK  GET/SET proriedades  Set metodos e retorna valores  Testa o estado!  Checa a chamada de métodos  Checa os argumentos usados  Testa Interações!
  • 30. Stubs e Mocks  Indispensáveis  Sem eles testar é doloroso e custoso  Criá-los na mão é doloroso e custoso  Gera muito retrabalho  Gasta-se muito tempo  Testar fica chato
  • 31. Framework de Mock  Frameworks de isolamento  Criam Mocks e Stubs de forma simples  Não há retrabalho  Lidam com vários tipos de configuração sem causar odores  Frameworks ◦ Rhino.Mocks ◦ Typemock Isolator ◦ Moq