我正在使用 Eclipse 中的 Junit 測(cè)試對(duì)學(xué)生的 Java 編程作業(yè)進(jìn)行評(píng)分。我的目標(biāo)是盡可能少地修改學(xué)生的提交,但我目前的方法迫使我在他們的提交中鍵入“extends ParentClass”。我目前的方法是將每個(gè)學(xué)生作業(yè)放在自己的包中,并從父類擴(kuò)展我想測(cè)試的類學(xué)生 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"); }}學(xué)生 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 家長(zhǎng)班package PA04.providedCode;public abstract class TestApple { public abstract void print();}然后,我使用超類參數(shù)類型的輔助方法來驗(yàn)證學(xué)生程序的行為學(xué)生測(cè)試計(jì)劃@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(); }學(xué)生測(cè)試計(jì)劃的輸出Look I can Print ALook I can Print B輸出是我所期望的,但是這種方法需要我修改學(xué)生的程序來擴(kuò)展父類有沒有一種方法可以在不修改它們的情況下為不同的學(xué)生班級(jí)使用輔助方法?
2 回答

慕村225694
TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果它是一次性測(cè)試并且您不需要進(jìn)一步維護(hù)它,則可以使用reflection. 您可以將packageTest()方法更改為:
private void packageTest(Object a) {
try {
Method method = a.getClass().getDeclaredMethod("print");
method.invoke(a);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
對(duì)于未來的作業(yè),我強(qiáng)烈建議您Interface向?qū)W生提供他們必須執(zhí)行的任務(wù)。

開心每一天1111
TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
不幸的是,我想不出一個(gè)簡(jiǎn)單的方法來解決您的問題。可能值得研究使用宏添加extends ParentClass
到每個(gè)包。
添加回答
舉報(bào)
0/150
提交
取消