TESTES AUTOMATIZADOS
Testes Unitários
Eu não vejo
nenhuma razão do
por que isso não
vai funcionar
Escrever sistema sem testes
automatizados é como trabalhar em um
painel de eletricidade com um garfo...
Ahhhh...
É por isso.
Por que testar?
 Como você sabe que o seu código funciona?
 Testes são uma maneira de ter certeza de que o SUT (System Under
Test) funciona
 Mas como você sabe que o seu Teste funciona?
 Será que você deve escrever teste para o seu teste?
 Então por que confiamos nos testes?
 Porque nós vimos ele falhar
 Se o teste não falhar, como temos certeza de que ele está testando
alguma coisa?
 TDD
 Test Driven Development
 Prega criar o teste antes do código
 Rodar o teste (vai falhar)
 Escrever o código para o teste passar
Tipos de Testes
 Testes de Carga
 Testes de UI
 Testes de Desempenho
 Testes de Integração
 Testes de Aceitação
 Testes Unitários
Teste Unitário x Teste Integração
 Teste de um único método
 Não deve depender de nenhuma outra unidade
 Banco de dados, arquivos de sistemas, arquivos de
configuração, WebServices, outras classes
Como você separa os
testes unitários dos testes
de integração?
Nomenclatura nos Testes
 Por que padronizar nomenclatura é importante?
 Facilita o entendimento sobre o que está sendo testado
 Facilita o desenvolvedor a escrever o teste
 Nome de classes de testes
 NomeClasseTestadaDeve
 NomeClasseTestada_NomeMetodo_Deve
 Nome de métodos de testes
 Deve ser uma ação que a classe testada deve fazer
 Exemplos
 ConversorTransmissaoDeve
 LancarExcecao_QuandoTransmissaoXmlNula
 ConverterTransmissao_QuandoTransmissaoXmlValida
 CalculadorPreco_Calcular_Deve
 RetornarPrecoPorKilo_QuandoUnidadeForPorKilo
 RetornarZero_QuandoItensVazio
Fases do Teste
 Existem 3 fases
 Criar o ambiente necessário para realizar o teste
 Instanciar classes, inicializar parametros
 Executar o método que está testando (SUT)
 Verificar se as condições esperadas foram satisfeitas
 Asserts
 Organizar o código do teste seguindo essas fases
 AAA - Arrange / Act / Assert
 Given / When / Then
 Vantagens
 Testes mais organizados
 Testes mais limpos
 Bater o olho e saber o que e como certa funcionalidade está sendo testada
 Exemplo teste sem a discriminação das 3 fases
 CRM
Como criar um código testável?
 SOLID
 Código difícil de testar
 ConversorTransmissao
 Refatorando
 Inversão de Dependência
 Mock
 Biblioteca Moq
Outro exemplo
Evitar
 Métodos estáticos
 DateTime.Now
 File.*
 Directory.*
 AppDomain.*
 Instanciar novas classes
Praticando
 Módulo Wowza
 Carrinho
 Sugestão DOJO

Testes Unitários

  • 1.
  • 2.
    Eu não vejo nenhumarazão do por que isso não vai funcionar Escrever sistema sem testes automatizados é como trabalhar em um painel de eletricidade com um garfo... Ahhhh... É por isso.
  • 3.
    Por que testar? Como você sabe que o seu código funciona?  Testes são uma maneira de ter certeza de que o SUT (System Under Test) funciona  Mas como você sabe que o seu Teste funciona?  Será que você deve escrever teste para o seu teste?  Então por que confiamos nos testes?  Porque nós vimos ele falhar  Se o teste não falhar, como temos certeza de que ele está testando alguma coisa?  TDD  Test Driven Development  Prega criar o teste antes do código  Rodar o teste (vai falhar)  Escrever o código para o teste passar
  • 4.
    Tipos de Testes Testes de Carga  Testes de UI  Testes de Desempenho  Testes de Integração  Testes de Aceitação  Testes Unitários
  • 5.
    Teste Unitário xTeste Integração  Teste de um único método  Não deve depender de nenhuma outra unidade  Banco de dados, arquivos de sistemas, arquivos de configuração, WebServices, outras classes Como você separa os testes unitários dos testes de integração?
  • 6.
    Nomenclatura nos Testes Por que padronizar nomenclatura é importante?  Facilita o entendimento sobre o que está sendo testado  Facilita o desenvolvedor a escrever o teste  Nome de classes de testes  NomeClasseTestadaDeve  NomeClasseTestada_NomeMetodo_Deve  Nome de métodos de testes  Deve ser uma ação que a classe testada deve fazer  Exemplos  ConversorTransmissaoDeve  LancarExcecao_QuandoTransmissaoXmlNula  ConverterTransmissao_QuandoTransmissaoXmlValida  CalculadorPreco_Calcular_Deve  RetornarPrecoPorKilo_QuandoUnidadeForPorKilo  RetornarZero_QuandoItensVazio
  • 7.
    Fases do Teste Existem 3 fases  Criar o ambiente necessário para realizar o teste  Instanciar classes, inicializar parametros  Executar o método que está testando (SUT)  Verificar se as condições esperadas foram satisfeitas  Asserts  Organizar o código do teste seguindo essas fases  AAA - Arrange / Act / Assert  Given / When / Then  Vantagens  Testes mais organizados  Testes mais limpos  Bater o olho e saber o que e como certa funcionalidade está sendo testada  Exemplo teste sem a discriminação das 3 fases  CRM
  • 8.
    Como criar umcódigo testável?  SOLID  Código difícil de testar  ConversorTransmissao  Refatorando  Inversão de Dependência  Mock  Biblioteca Moq
  • 9.
  • 10.
    Evitar  Métodos estáticos DateTime.Now  File.*  Directory.*  AppDomain.*  Instanciar novas classes
  • 11.
    Praticando  Módulo Wowza Carrinho  Sugestão DOJO