Skip to main content

用于运行和解释 junit5 单元测试的 check50 扩展

项目描述

check50_junit

这是CS50 automarker check50的扩展, 用于编译和运行Junit5单元测试,并将产生的故障直接提升为 check50 用于检查的故障。

该模块附带Junit5 的独立控制台启动器

您的问题集只需要包含 junit 测试类的编译字节码,这些字节码是针对您的练习模型解决方案编译的。这解决了由于意外的方法签名类标识符而导致单元测试可能无法为学生代码编译的问题。此类错误将反映在 JUnit 的报告 XML 文件中。

示例用法

TLDR:进口check50_junit;将已编译的 junit 测试类添加到您的 pset,并check50_junit5.run_and_interpret_test在您的检查中使用。下面是一个完整的例子。

下面的所有示例都假定您正在导入check50check50_junit.

  1. 编写模型解决方案和单元测试类并手动编译它们。

    public class Drink {
        private final int volume;
    
        public Drink(int v) {
            volume = v;
        }
    
        int getVolume() {
            return volume;
        }
    
    import static org.junit.jupiter.api.Assertions.*;
    import org.junit.jupiter.api.Test;
    
    class DrinkTest {
      @Test
      public void getVolume() {
        Drink d = new Drink(200);
        assertEquals(200, d.getVolume());
      }
    }
    
  2. 将字节码移动DrinkTest.class到 pset 目录的某个位置,例如在tests/.

  3. 添加如下检查(我通常会根据类的存在、编译和实例化来进行检查)。

    @check50.check()
    def drink_getVolume():
        """Test Drink.getVolume()"""
        check50_junit.run_and_interpret_test(
            classpaths=['tests/'],
            args=['--select-method', 'DrinkTest#getVolume'])
    

    这将对学生提交的预编译单元测试运行,解析 junit 的 XML 报告并check50.Failure根据结果提出任何 s。check50.Mismatch在这种情况下,如果assertEquals单元测试被抛出,它将引发异常。

  4. 确保check50-java在您的 pset 中添加为依赖项.cs50.yml

    check50:
      dependencies:
        - check50-java
      files:
        - !exclude "*"
        - !include "*.java"
    

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

check50_junit-0.5.tar.gz (2.0 MB 查看哈希

已上传 source

内置分布

check50_junit-0.5-py3-none-any.whl (2.0 MB 查看哈希

已上传 py3