Nos meus testes de unidade, geralmente jogo valores arbitrários no meu código para ver o que ele faz. Por exemplo, se eu souber que foo(1, 2, 3)deve retornar 17, eu poderia escrever o seguinte:
assertEqual(foo(1, 2, 3), 17)
Esses números são puramente arbitrários e não têm um significado mais amplo (eles não são, por exemplo, condições de contorno, embora eu também teste neles). Eu lutaria para criar bons nomes para esses números, e escrever algo como const int TWO = 2;é obviamente inútil. Tudo bem escrever os testes assim ou devo fatorar os números em constantes?
Em Todos os números mágicos são criados da mesma forma? , aprendemos que os números mágicos são bons se o significado for óbvio no contexto, mas, nesse caso, os números realmente não têm significado algum.
const int TWO = 2;é ainda pior do que apenas usar 2. Está em conformidade com a redação da regra com a intenção de violar seu espírito.
foo, não significaria nada e, portanto, os parâmetros. Mas, na realidade, eu tenho certeza que a função não tem esse nome, e os parâmetros não têm nomes bar1, bar2e bar3. Faça um exemplo mais realista em que os nomes tenham significado e faça muito mais sentido discutir se os valores dos dados de teste também precisam de um nome.
1, 2, 3forem índices de matriz 3D em que você armazenou anteriormente o valor17, acho que esse teste seria dândi (desde que você também tenha alguns testes negativos). Mas se é o resultado de um cálculo, você deve se certificar de que quem lê este teste vai entender por quefoo(1, 2, 3)deve ser17, e números mágicos provavelmente não vai alcançar essa meta.