考虑以下伪代码。它旨在确定一个成绩是否为及格成绩。
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
对于第二种方法,如果发生更改,我们的测试必须重新编写MIN_PASSING_GRADE
。第一种方法更灵活,但依赖于MIN_PASSING_GRADE
具有正确的值。
我不完全确定更喜欢哪种方法,一般会根据具体情况进行选择。一方面,MIN_PASSING_GRADE
应该通过不同的测试来确保它是理智的。另一方面,我担心所谓的“单元”测试会触及代码库中的太多其他地方。
这是一个人为的例子,但在实际程序中经常会出现类似的情况。解决它们的最佳方法是什么?