构建一个JUnit测试类。它被用作自动分级机。有些提交文件没有所有必需的类方法(即使它是规范的一部分)。当然,自动分级机只是总成绩的一部分(例如50%)。它改善了玩500场游戏的问题,以测试游戏是否按预期运行。
除了检查是否存在所有方法外,最好检查它们是否也可调用。
JUnit测试代码段:
<span class="checkbox-material">
@Test
public void test_1p1t4_15() {
// Test if callable
try {
Direction d1 = new Direction();
checkMethod(d1.getClass(), "print");
} catch (Exception e) {
fail("Test fails:"+e.toString());
}
}
函数有助于显示与该方法的实现相关的问题,例如可见性,例如
checkMethod
答案 0 :(得分:1)
这是一个简单的示例,演示了如何使用参数查找和调用方法(如果该方法存在)。您将需要在JUnit测试中调用invokeIfExists
。然后,您可以断言返回的值与您期望的值匹配。
import java.lang.reflect.*;
public class Main {
static Object invokeIfExists(Class<?> cls, String methodName,
Class<?>[] argTypes,
Object callingObject, Object[] args) {
try {
Method method = cls.getDeclaredMethod(methodName, argTypes);
return method.invoke(callingObject, args);
} catch (SecurityException | NoSuchMethodException e) {
System.err.println("Method " + methodName + " not found.");
} catch (IllegalAccessException | IllegalArgumentException e) {
System.err.println("Method " + methodName + " could not be invoked.");
} catch (InvocationTargetException e) {
System.err.println("Method " + methodName + " threw an exception.");
}
return null; // Or assert false, etc.
}
public static void main(String[] args) {
Direction direction = new Direction("a", "b");
// Tries to invoke "direction.print(123)"
String printResult = (String) invokeIfExists(
Direction.class, "print", new Class<?>[]{int.class},
direction, new Object[]{123});
System.out.println(printResult); // "Direction: a -> b and foo=123"
// Tries to invoke "direction.doesntExist()"
Object doesntExistResult = invokeIfExists(
Direction.class, "doesntExist", new Class<?>[]{},
direction, new Object[]{});
System.out.println(doesntExistResult); // null
}
}
class Direction {
private String from, to;
Direction(String from, String to) {
this.from = from;
this.to = to;
}
String print(int foo) {
return "Direction: " + from + " -> " + to + " and foo=" + foo;
}
}