単体テストでは、コードに任意の値をスローして、その機能を確認することがよくあります。たとえば、foo(1, 2, 3)
17を返すことになっていることがわかっている場合、次のように記述できます。
assertEqual(foo(1, 2, 3), 17)
これらの数値は純粋に任意であり、より広い意味を持ちません(たとえば、境界条件ではありませんが、これらについてもテストします)。私はこれらの数字の良い名前を思い付くのに苦労するだろうし、そのような何かを書くことconst int TWO = 2;
は明らかに役に立たない。このようなテストを書いても大丈夫ですか?それとも定数に数値を含める必要がありますか?
されているすべてのマジックナンバーは同じを作成しましたか?、文脈から意味が明らかな場合、マジックナンバーはOKであることがわかりましたが、この場合、実際にはナンバーはまったく意味を持ちません。
const int TWO = 2;
を使用するよりもさらに悪い2
。ルールの精神に違反することを意図したルールの文言に準拠しています。
foo
場合、それは何も意味しないので、パラメータです。しかし、現実には、私は、関数がその名前を持っていないかなり確信して、パラメータは名前を持っていないbar1
、bar2
とbar3
。名前は、より現実的な例作る持っている 意味が、それは、テストデータ値が名前を必要とする場合も、議論するためにはるかに理にかなっています。
1, 2, 3
以前にvalueを格納した3D配列インデックスがある場合17
、このテストは(いくつかのネガティブテストがある限り)ダンディになると思います。ただし、計算の結果である場合は、このテストを読んでいる人がなぜそうなのかを理解し、マジックナンバーはおそらくその目標を達成しないことを確認するfoo(1, 2, 3)
必要が17
あります。