W moich testach jednostkowych często rzucam dowolne wartości na mój kod, aby zobaczyć, co on robi. Na przykład, jeśli wiem, że foo(1, 2, 3)
ma to zwrócić 17, mógłbym napisać:
assertEqual(foo(1, 2, 3), 17)
Liczby te są czysto arbitralne i nie mają szerszego znaczenia (nie są na przykład warunkami brzegowymi, chociaż testuję je również). Trudno mi wymyślić dobre nazwiska dla tych liczb, a pisanie czegoś takiego const int TWO = 2;
jest oczywiście bezużyteczne. Czy pisanie takich testów jest w porządku, czy powinienem rozłożyć liczby na stałe?
W Czy wszystkie magiczne liczby są takie same? , dowiedzieliśmy się, że liczby magiczne są OK, jeśli znaczenie jest oczywiste z kontekstu, ale w tym przypadku liczby faktycznie nie mają żadnego znaczenia.
const int TWO = 2;
jest nawet gorszy niż zwykłe używanie 2
. Jest zgodny z brzmieniem reguły z zamiarem naruszenia jej ducha.
foo
, to nic by to nie znaczyło, a więc parametry. Ale w rzeczywistości, jestem całkiem pewny, że funkcja nie posiada tę nazwę, a parametry nie mają nazwy bar1
, bar2
i bar3
. Zrób bardziej realistyczny przykład, w którym nazwy mają znaczenie, wtedy sensowniej jest omówić, czy wartości danych testowych również wymagają nazwy.
1, 2, 3
są indeksami tablic 3D, w których wcześniej zapisałeś wartość17
, to myślę, że ten test byłby dandysowy (pod warunkiem, że masz również kilka testów negatywnych). Ale jeśli jest to wynik obliczeń, upewnij się, że każdy, kto przeczyta ten test, zrozumie, dlaczegofoo(1, 2, 3)
tak jest17
, a magiczne liczby prawdopodobnie nie osiągną tego celu.