Recentemente, criei a seguinte convenção para nomear meus testes, suas classes e conter projetos, a fim de maximizar seus descritores:
Digamos que estou testando a Settings
classe em um projeto no MyApp.Serialization
espaço para nome.
Primeiro, criarei um projeto de teste com o MyApp.Serialization.Tests
espaço para nome.
Nesse projeto e, é claro, no namespace, criarei uma classe chamada IfSettings
(salva como IfSettings.cs ).
Digamos que estou testando o SaveStrings()
método. -> Vou nomear o testeCanSaveStrings()
.
Quando eu executo este teste, ele mostra o seguinte título:
MyApp.Serialization.Tests.IfSettings.CanSaveStrings
Eu acho que isso me diz muito bem o que está testando.
Obviamente, é útil que em inglês o substantivo "Tests" seja o mesmo que o verbo "tests".
Não há limite para a sua criatividade ao nomear os testes, para que possamos obter títulos de frases completos para eles.
Geralmente, os nomes dos testes precisam começar com um verbo.
Exemplos incluem:
- Detecta (por exemplo
DetectsInvalidUserInput
)
- Arremessos (por exemplo
ThrowsOnNotFound
)
- Will (por exemplo
WillCloseTheDatabaseAfterTheTransaction
)
etc.
Outra opção é usar "that" em vez de "if".
O último me salva as teclas e descreve mais exatamente o que estou fazendo, já que não sei, que o comportamento testado está presente, mas estou testando, se estiver.
[ Editar ]
Depois de usar a convenção de nomenclatura acima por um pouco mais agora, descobri que o prefixo If pode ser confuso ao trabalhar com interfaces. Acontece que a classe de teste IfSerializer.cs se parece muito com a interface ISerializer.cs na "Guia Arquivos abertos". Isso pode ser muito irritante ao alternar entre os testes, a classe que está sendo testada e sua interface. Como resultado, eu iria agora escolher que mais de Se como um prefixo.
Além disso, agora eu uso - apenas para métodos nas minhas classes de teste, pois não é considerado uma prática recomendada em nenhum outro lugar - o "_" para separar palavras nos nomes dos meus métodos de teste, como em:
[Test] public void detects_invalid_User_Input()
Acho que isso é mais fácil de ler.
[ Fim da edição ]
Espero que isso gere mais algumas idéias, pois considero nomear testes de grande importância, pois isso pode poupar muito tempo que, de outra forma, seria gasto tentando entender o que os testes estão fazendo (por exemplo, depois de retomar um projeto após um hiato prolongado) .