我正在使用 Eclipse 中的 Junit 测试对学生的 Java 编程作业进行评分。我的目标是尽可能少地修改学生的提交,但我目前的方法迫使我在他们的提交中键入“extends ParentClass”。我目前的方法是将每个学生作业放在自己的包中,并从父类扩展我想测试的类学生 A APPLE 示例班package PA04.studentA;import PA04.providedCode.TestApple;public class apple extends TestApple { public void print() { System.out.println("Look I can Print A"); }}学生 B 苹果示例班package PA04.studentB;import PA04.providedCode.TestApple;public class apple extends TestApple { public void print() { System.out.println("Look I can Print B"); }}TESTAPLE 家长班package PA04.providedCode;public abstract class TestApple { public abstract void print();}然后,我使用超类参数类型的辅助方法来验证学生程序的行为学生测试计划@Testvoid testStudentA() { PA04.studentA.apple a = new PA04.studentA.apple(); packageTest(a);}@Testvoid testStudentB() { PA04.studentB.apple b = new PA04.studentB.apple(); packageTest(b);}/** * helper method to test behavior of classes with the same name* but different packages*/private void packageTest(TestApple a) { a.print(); }学生测试计划的输出Look I can Print ALook I can Print B输出是我所期望的,但是这种方法需要我修改学生的程序来扩展父类有没有一种方法可以在不修改它们的情况下为不同的学生班级使用辅助方法?
2 回答
慕村225694
TA贡献1880条经验 获得超4个赞
如果它是一次性测试并且您不需要进一步维护它,则可以使用reflection. 您可以将packageTest()方法更改为:
private void packageTest(Object a) {
try {
Method method = a.getClass().getDeclaredMethod("print");
method.invoke(a);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
对于未来的作业,我强烈建议您Interface向学生提供他们必须执行的任务。
添加回答
举报
0/150
提交
取消