如何使单元测试始终通过?

bra*_*age 4 java testing reflection

让我们假设有人必须为问题编写解决方案,我必须通过一些测试来测试他的解决方案.是否有可能(可能有反思或某些东西)他的程序通过我所有的测试,但与问题的真正解决方案没有任何共同之处?

emo*_*ory 5

一般情况

在一般情况下,没有.由于他们甚至不知道你正确地实施了测试,他们所做的一切 - 甚至没有正确实施作业 - 都可以保证通过测试.

特别案例

如果学生可以运行测试,他们可以使用学习算法.

如果学生可以访问测试的源代码,他们可以查找使用反射来获取存储在变量中的预期结果的技巧.如果他们找不到任何源代码技巧,他们仍然可以编译并运行您的测试.

如果学生可以访问测试的字节代码,他们可能会反汇编它并使用源代码技巧.即使你有效地模糊了它,它们仍然可以运行它.

如果学生知道您正在测试学生代码与其他学生代码,他们所要做的就是一致.

建议

  1. 不要让学生可以参加考试.他们应该独立测试他们的作业.在他们将作业提交给您进行正式评估后,请运行测试.
  2. 使用随机化使您的测试更加健壮.
  3. 如果您的测试将学生代码与其他学生代码进行比较,那么您应该手动调查每个失败.也许一个学生正确实施,其他人复制了不正确的实施.在这种情况下,多数规则奖励无能.
  4. 您可以收集他们的测试并测试他们的测试.