You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让junit-quickcheck属性测试获取现有实体生成器可返回的实体集合

junit-quickcheck自定义实体列表生成解决方案

你遇到空列表的核心原因是junit-quickcheck默认的列表生成器允许生成长度为0的空集合,部分旧版本对泛型参数上的@From注解识别存在兼容问题,可按以下方案修改:

方案1(推荐,无需额外编写生成器)

在List参数上增加@Size注解指定生成列表的长度范围,同时确保测试类加上运行器注解:

import javax.validation.constraints.Size;
import com.pholser.junit.quickcheck.Property;
import com.pholser.junit.quickcheck.From;
import com.pholser.junit.quickcheck.runner.JUnitQuickcheck;
import org.junit.runner.RunWith;

// 必须添加该运行器注解,否则生成器逻辑不会生效
@RunWith(JUnitQuickcheck.class)
public class YourTest {
  @Property(trials = 5)
  public void addingInDiffOrderResultsInSameResult(
      // min指定最小长度为1即可避免空列表,max可按测试需要调整
      @Size(min = 1, max = 10) List<@From(CusObjGen.class) CusObj> objs) {
    // 测试逻辑
  }
}

方案2(兼容旧版本junit-quickcheck)

如果方案1无法正确生成CusObj实例,可自定义列表生成器直接引用:

  1. 自定义列表生成器
import com.pholser.junit.quickcheck.generator.java.util.ListGenerator;

public class CusObjListGenerator extends ListGenerator<CusObj> {
  public CusObjListGenerator() {
    // 传入你已有的单个实体生成器
    super(new CusObjGen());
  }
}
  1. 测试方法引用列表生成器
@Property(trials = 5)
public void addingInDiffOrderResultsInSameResult(
    @Size(min = 1, max = 10) @From(CusObjListGenerator.class) List<CusObj> objs) {
  // 测试逻辑
}

验证检查点

  • 确认CusObjGen继承com.pholser.junit.quickcheck.generator.Generator,且无参构造方法为public
  • 若需过滤非法实体值,优先在生成器内部实现过滤,性能优于测试方法上的@When条件过滤

内容的提问来源于stack exchange,提问作者Kranthi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:48:02