如何使 属性 测试获得实体生成器可以 return 的实体集合?

How to make the property test get a collection of entities an entity-generator can return?

我最近开始使用 junit-quickcheck 探索基于 属性 的测试。我遇到了一个用例,其中 属性 必须获取实体列表(我有一个独立实体的生成器)。我试过下面的代码,它总是给出一个空列表。

@Property(trials = 5)
  public void addingInDiffOrderResultsInSameResult(
      List<@From(CusObjGen.class) CusObj> objs) {
}

有人能告诉我一些正确的方法吗?

由于您尚未收到“junit-quickcheck”的答复,我至少可以确认它在 jqwik.net 中按预期工作(使用 JUnit 5 平台替代 junit-quickcheck):

@Property(tries = 5)
public void addingInDiffOrderResultsInSameResult(
    @ForAll List<@From("cusObjects") CusObj> objs
) {
    ...
}

@Provide
Arbitrary<CusObj> cusObjects() {
    // Whatever your CusObj generator has to do...
}

我通过创建另一个生成器来实现它,该生成器使用已经存在的实体生成器生成实体列表,如下所示:

public class CusObjListGenerator extends Generator<List> {

  public CusObjListGenerator () {
    super(List.class);
  }

  @Override
  public List<CusObj> generate(SourceOfRandomness random, GenerationStatus status) {
    CusObjGen generator = gen().make(CusObjGen.class);
    List<CusObj> objs = new ArrayList<>();
    int randomNoOfEvents = random.nextInt(1, 15);
    for (int i = 1; i <= randomNoOfEvents; i++) {
      objs.add(generator.generate(random, status));
    }
    return objs;
  }
}