如何使 属性 测试获得实体生成器可以 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;
}
}
我最近开始使用 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;
}
}