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, bar2e 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, 3sono 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.