En mis pruebas unitarias, a menudo arrojo valores arbitrarios a mi código para ver qué hace. Por ejemplo, si sé que foo(1, 2, 3)se supone que devuelve 17, podría escribir esto:
assertEqual(foo(1, 2, 3), 17)
Estos números son puramente arbitrarios y no tienen un significado más amplio (no son, por ejemplo, condiciones de contorno, aunque también las pruebo). Me gustaría encontrar buenos nombres para estos números, y escribir algo así const int TWO = 2;obviamente no es útil. ¿Está bien escribir las pruebas de esta manera, o debo factorizar los números en constantes?
En es Todos los números mágicos crean de la misma? , aprendimos que los números mágicos están bien si el significado es obvio por el contexto, pero en este caso los números en realidad no tienen ningún significado.
const int TWO = 2;es incluso peor que solo usarlo 2. Se ajusta a la redacción de la regla con la intención de violar su espíritu.
foo, no significaría nada y, por lo tanto, los parámetros. Pero, en realidad, estoy bastante seguro de que la función no tiene ese nombre, y los parámetros no tienen nombres bar1, bar2y bar3. Haga un ejemplo más realista donde los nombres tengan un significado, entonces tiene mucho más sentido discutir si los valores de los datos de prueba también necesitan un nombre.
1, 2, 3hay índices de matriz 3D donde previamente almacenó el valor17, entonces creo que esta prueba sería excelente (siempre y cuando también tenga algunas pruebas negativas). Pero si es el resultado de un cálculo, debe asegurarse de que cualquiera que lea esta prueba entienda por quéfoo(1, 2, 3)debería serlo17, y los números mágicos probablemente no logren ese objetivo.