Nei miei test unitari, spesso lancio valori arbitrari sul mio codice per vedere cosa fa. Ad esempio, se so che foo(1, 2, 3)
dovrebbe restituire 17, potrei scrivere questo:
assertEqual(foo(1, 2, 3), 17)
Questi numeri sono puramente arbitrari e non hanno un significato più ampio (non sono, ad esempio, condizioni al contorno, anche se faccio un test anche su quelli). Farei fatica a trovare buoni nomi per questi numeri e scrivere qualcosa del genere const int TWO = 2;
è ovviamente inutile. È corretto scrivere i test in questo modo o dovrei fattorizzare i numeri in costanti?
In Tutti i numeri magici sono creati uguali? , abbiamo appreso che i numeri magici sono OK se il significato è ovvio dal contesto, ma in questo caso i numeri in realtà non hanno alcun significato.
const int TWO = 2;
è anche peggio del semplice utilizzo 2
. È conforme alla formulazione della regola con l'intento di violare il suo spirito.
foo
, non significherebbe nulla e quindi i parametri. Ma in realtà, sono abbastanza sicuro che la funzione non ha quel nome, ed i parametri non hanno un nome bar1
, bar2
e bar3
. Fai un esempio più realistico in cui i nomi hanno un significato, quindi ha molto più senso discutere se anche i valori dei dati di test hanno bisogno di un nome.
1, 2, 3
sono indici di array 3D in cui hai precedentemente memorizzato il valore17
, allora penso che questo test sarebbe dandy (purché tu abbia anche dei test negativi). Ma se è il risultato di un calcolo, dovresti assicurarti che chiunque legga questo test capirà perchéfoo(1, 2, 3)
dovrebbe essere17
, e probabilmente i numeri magici non raggiungeranno questo obiettivo.