我目前是使用 Java 的课程的教师助理。我正在尝试编写一段代码来测试以确保学生的方法是正确的,但通常学生甚至不会实现该方法,或者他们会称其为不正确的东西,这显然会导致 Unresolved运行我的测试代码时出现编译问题。有没有办法在运行时捕获这个错误,这样我的测试代码就可以执行,而不必玩弄学生提交的代码?
- 编辑:刚刚发现编译器在运行前生成了一个未解决的编译问题。考虑到这一点,有没有办法做我上面解释的事情?
- 编辑:另外,我无法控制分配的结构方式,所以我不能引入接口或存根等。
我目前是使用 Java 的课程的教师助理。我正在尝试编写一段代码来测试以确保学生的方法是正确的,但通常学生甚至不会实现该方法,或者他们会称其为不正确的东西,这显然会导致 Unresolved运行我的测试代码时出现编译问题。有没有办法在运行时捕获这个错误,这样我的测试代码就可以执行,而不必玩弄学生提交的代码?
如果我是 TA,我会写一些单元测试并告诉学生通过测试。让他们尽早进行测试。
如果代码无法编译,那么在运行时检测它是没有意义的。如果它无法编译,您将无法运行。
如果您使用反射,您可以检查该方法是否存在、调用方法并遍历现有方法以可能找到学生的方法。
有关从文件加载学生代码的信息,请参见 UrlClassLoader 类。
如果我理解您的问题,您正在尝试验证学生实现的接口以及实现的正确性。反射 API 将允许确定一个类是否实现了正确的 API,如果已经实现,则调用该 API。看java.lang.Class、java.lang.Method等。
听起来您现在已经进入了课程的面向对象部分。我认为创建一个包含所有已分配方法的超类可能是个好主意。然后学生可以简单地扩展该超类并实现方法。你的存根应该只抛出一个 RuntimeException ,这会导致相应的单元测试失败。这应该允许您创建单元测试,而不必过多担心学生没有实施特定的方法。