0

我是 Java 课程的助教,我的部分工作是每周为大约 100 个 Java 编程作业评分,每个作业由 3-5 个独立的 Java 程序组成。为学生提供每个问题的骨架框架(这使得包/类/方法的名称相同),他们所要做的就是填写方法的逻辑。

我想知道验证所有此类提交的正确性的最佳方法是什么,也许使用 JUnit(或类似框架)加上一些脚本?在我继续这样做之前,我想知道是否有更好的方法来实际设置一个系统,在那里我只需更改测试用例(和相应的类/方法名称)并能够执行整个集合作业?

我主要寻找可以做到这一点的框架的指针,尽管我非常欢迎详细的解决方案/已实现框架的类似实例!

4

2 回答 2

1

因为所有学生都有相同的包/类和方法名称。编写一个测试方法的 JUnit 类应该很容易。您需要做的就是弄清楚如何将每个学生的课程挂钩。

由于您控制所有代码,因此我建议包括一个工厂方法或已知构造函数来创建每个学生实现的实例。甚至可以使用像 Google Guice 这样的依赖注入框架来为您处理创建。

我从未尝试过,但Jukito似乎很有希望,它使用 Guice 直接注入到您的单元测试中。但是,看起来他们最近移动了存储库并且尚未更新 wiki 链接(是他们的旧项目页面,其中至少有代码示例)

@RunWith(JukitoRunner.class)
public class Project1Test{
    @Inject
    Project1 studentImplementation;

    @Test
    public void testMethod1(){

       //...
    }

    @Test
    public void testMethod2DoesntOverflow(){
        //...
    }
    //...
 }

}

我什至建议学生在提交之前自行运行测试,以便他们查看自己是否满足所有要求并通过所有测试。(当然你会运行自己的测试副本,这样学生就不会修改测试,所以无论如何他们总是通过)

如果这不起作用,您总是可以编写一个脚本来执行某种查找/替换以粘贴到学生的实现中,然后一遍又一遍地重新编译和运行代码。

于 2013-09-04T00:37:30.183 回答
1

我想我可以通过颠覆来做到这一点。每个分配的单独目录。学生在准备好后签到,这会触发 JUnit 测试运行。

我不确定您是否可以在不自己编写代码的情况下逃脱。单元测试必须弄清楚它正在运行谁的代码,然后运行它等等。不确定是在单元测试中这样做,还是让詹金斯这样做会更好。

于 2013-09-03T21:58:42.910 回答