O Padrão Triple A (Arrange, Act, Assert)
Este é a parte 2 de um série de 3 partes sobre Melhores Práticas em Testes de Unidade.
Você pode conferir as outras partes aqui:
- Parte 1: Testes de Unidade com TDD (Test Driven Development)
- Parte 3: Test Doubles (Mocks, Stubs, Fakes, Spies, Dummies)
Testes de unidade bem escritos trazem qualidade ao nosso trabalho. Mas como saber se estamos escrevendo testes da forma correta? Qual o mínimo necessário para garantir que um trecho de código seja considerado um teste de unidade completo?
O modelo Triple A é um padrão que diz que todo o teste de unidade deve possuir três etapas: Arrange (Preparar o teste), Act (Rodar o teste) e Assert (Verificar as asserções).
1ª Arrange
Nesta etapa nós configuramos tudo o que é necessário para que o nosso teste possa rodar, inicializamos variáveis, criamos alguns test doubles como Mocks ou Spies dentre outras coisas.
2ª Act
Esta etapa é onde rodamos de fato o nosso teste. Chamamos alguma função ou método que queremos por a prova.
3ª Assert
Esta etapa é onde faremos nosso assert. É onde verificamos se a operação realizada na etapa anterior (Act) surtiu o resultado esperado. Assim sabemos se o teste passa ou falha.
Exemplo:
Vamos construir uma função Sum que soma dois valores e analisar cada etapa do seu teste. Seguindo o processo TDD começamos pelo teste:
Fica claro neste exemplo que cada teste de unidade obrigatoriamente deve conter estas 3 etapas para ser um teste válido. Na etapa Arrange nós inicializamos três variáveis (value1, value2 e expected). Na etapa Act nós inicializamos uma variável para armazenar o resultado na nossa ação, que é executar a função Sum. Na terceira etapa (Assert), fazemos uma verificação para ver se o teste passa ou falha.
Pode acontecer de nós compartilharmos alguma etapa com outros testes como veremos abaixo:
Podemos ver no código acima que criamos um helper (t.Helper()) para compartilhar a etapa de Assert entre os testes. Os dois testes ainda continuam tendo as 3 etapas de forma independente. Da mesma maneira podemos compartilhar as etapas de Arrange e Act.
Nada de complicado no modelo Triple A. Simplesmente devemos ter em mente que todo teste de unidade deve passar por essas três etapas.