O código duplicado é um cheiro no código de teste de unidade tanto quanto em outro código. Se você tiver código duplicado nos testes, será mais difícil refatorar o código de implementação porque você tem um número desproporcional de testes para atualizar. Os testes devem ajudá-lo a refatorar com confiança, em vez de ser uma grande carga que impede seu trabalho no código que está sendo testado.
Se a duplicação estiver em uma configuração de fixação, considere fazer mais uso do setUp
método ou fornecer mais (ou mais flexíveis) Métodos de Criação .
Se a duplicação está no código que manipula o SUT, pergunte-se por que vários testes chamados de “unidade” estão exercendo exatamente a mesma funcionalidade.
Se a duplicação estiver nas afirmações, talvez você precise de algumas afirmações personalizadas . Por exemplo, se vários testes tiverem uma sequência de afirmações como:
assertEqual('Joe', person.getFirstName())
assertEqual('Bloggs', person.getLastName())
assertEqual(23, person.getAge())
Então, talvez você precise de um único assertPersonEqual
método para poder escrever assertPersonEqual(Person('Joe', 'Bloggs', 23), person)
. (Ou talvez você simplesmente precise sobrecarregar o operador de igualdade Person
.)
Como você mencionou, é importante que o código de teste seja legível. Em particular, é importante que a intenção de um teste seja clara. Eu acho que se muitos testes parecem quase iguais (por exemplo, três quartos das linhas iguais ou virtualmente iguais) é difícil detectar e reconhecer as diferenças significativas sem ler e compará-las cuidadosamente. Portanto, acho que a refatoração para remover a duplicação ajuda na legibilidade, porque cada linha de cada método de teste é diretamente relevante para o propósito do teste. Isso é muito mais útil para o leitor do que uma combinação aleatória de linhas que são diretamente relevantes e linhas que são apenas clichês.
Dito isso, às vezes os testes exercem situações complexas que são semelhantes, mas ainda assim significativamente diferentes, e é difícil encontrar uma boa maneira de reduzir a duplicação. Use o bom senso: se você sentir que os testes são legíveis e deixar sua intenção clara, e se sentir confortável com a talvez necessidade de atualizar mais do que um número teoricamente mínimo de testes ao refatorar o código invocado pelos testes, aceite a imperfeição e mude para algo mais produtivo. Você sempre pode voltar e refatorar os testes mais tarde, quando a inspiração bater!