2. 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.
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 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?
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 um código testável?
SOLID
Código difícil de testar
ConversorTransmissao
Refatorando
Inversão de Dependência
Mock
Biblioteca Moq