次の疑似コードを検討してください。成績が合格かどうかを判断するように設計されています。
class Student:
int grade
boolean IsStudentPassing():
return grade >= MIN_PASSING_GRADE
...
// In another file
constant int MIN_PASSING_GRADE = 70
の単体テストを書いている場合IsStudentPassing
、定数値を使用できます。
ensure that IsStudentPassing is false when grade is MIN_PASSING_GRADE - 1
ensure that IsStudentPassing is true when grade is MIN_PASSING_GRADE
または、値を手動で選択することもできます。
ensure that IsStudentPassing is false when grade is 69
ensure that IsStudentPassing is true when grade is 70
2 番目のアプローチでは、変更があった場合、テストを書き直す必要がありMIN_PASSING_GRADE
ます。MIN_PASSING_GRADE
最初のアプローチはより柔軟ですが、正しい値を持つことに依存しています。
どちらのアプローチを優先するかは完全にはわかりませんが、一般的にはケースバイケースで選択します。一方では、それMIN_PASSING_GRADE
が正気であることを保証することは、別のテストによって処理されるべきです。一方で、おそらく「単体」テストがコードベースの他の多くの場所に触れていることを心配しています。
これは不自然な例ですが、実際のプログラムでも同様の状況がよく発生します。それらに対処するための最良のアプローチは何ですか?