有没有办法动态创建一个包含类代码的字符串的类,或者以相同的方式将方法添加到先前创建的现有类?
用例场景:学生正在参加考试,他必须在没有 IDE 的情况下编写一些方法(因此他提交了一个简单的字符串)。我想要实现的是一种对他的提交执行简单单元测试的方法。例如一个可点击的按钮来运行由教授提供的单元测试。
对不起我的英语不好,提前谢谢!
有没有办法动态创建一个包含类代码的字符串的类,或者以相同的方式将方法添加到先前创建的现有类?
用例场景:学生正在参加考试,他必须在没有 IDE 的情况下编写一些方法(因此他提交了一个简单的字符串)。我想要实现的是一种对他的提交执行简单单元测试的方法。例如一个可点击的按钮来运行由教授提供的单元测试。
对不起我的英语不好,提前谢谢!
KIT(德国卡尔斯鲁厄的一所大学)创建了一个工具来测试学生的编程任务。你可以看看这里
学生将提交 Java 源代码,而不是字节码。Java 源代码必须先使用 Java 编译器编译成字节码,然后才能被类加载器加载。您可以通过以编程方式调用编译器来执行此操作(请参阅此答案)。在运行时加载这个新文件的字节码.class
可以这样完成:
class NetworkClassLoader extends ClassLoader {
String host;
int port;
public Class findClass(String name) {
byte[] b = loadClassData(name);
return defineClass(name, b, 0, b.length);
}
private byte[] loadClassData(String name) {
// load the class data from the connection
. . .
}
}
(这里的例子,谢谢@Robert)。
一旦你有了一个实例,你就可以将它提供给你的测试应用程序来运行一些测试并获得结果。
让提交的类实现您定义的接口并让您的测试代码针对该接口进行测试是最简单的。这样,您的测试将预先编译,并且仍然可以在运行时处理动态编译和实例化的提交。