我是Java课程的助教,我的部分工作是每周对约100个Java编程作业进行评分,每个作业由3-5个独立的Java程序组成。为每个问题为学生提供了一个骨架框架(使得包/类/方法的名称相同),他们所要做的就是填写方法的逻辑。
我想知道验证所有此类提交的正确性的最佳方法是什么,可能使用JUnit(或类似的框架)加上一些脚本?在我继续这样做之前,我想知道是否有更好的方法来实际建立一个系统,我只需要更改测试用例(和相应的类/方法名称),并且能够执行整个系统分配
我正在寻找可以做到这一点的框架的指针,尽管我非常欢迎详细的解决方案/已实现框架的类似实例!
答案 0 :(得分:1)
我想我可能会通过颠覆来做到这一点。每个分配单独的目录。学生准备好后会检入,这会触发JUnit测试。
我不确定如果不自己编写代码就可以逃脱。单元测试必须弄清楚它正在运行的代码,然后运行它等。不确定是否在单元测试中执行,或者让jenkins执行它会更好。
答案 1 :(得分:1)
由于所有学生都拥有相同的包/类和方法名称。编写一个测试方法的JUnit类应该很容易。您需要做的就是弄清楚如何挂钩每个学生的课程。
由于您控制所有代码,我建议包含工厂方法或已知构造函数来为每个Student的实现创建实例。甚至可以使用像Google Guice这样的依赖注入框架来为您处理创作。
我从来没有尝试过,但Jukito似乎很有希望,它使用Guice直接注入你的单元测试。但是,看起来他们最近移动了存储库并且尚未更新维基链接(here是他们的旧项目页面,至少有代码示例)
@RunWith(JukitoRunner.class)
public class Project1Test{
@Inject
Project1 studentImplementation;
@Test
public void testMethod1(){
//...
}
@Test
public void testMethod2DoesntOverflow(){
//...
}
//...
}
}
我甚至建议让学生在提交之前自己运行测试,这样他们就可以看到他们是否满足所有要求并通过了所有测试。 (当然你会运行你自己的测试副本,这样学生就不会修改测试,所以无论如何他们总是通过测试)
如果这不起作用,您总是可以编写一个脚本来执行某些查找/替换以粘贴到学生的实现中,然后重复编译并反复运行代码。