0

我们在一个类中指定了一堆生成器。

class MyUsefulGenerators {

    @Provide 
    public Arbitrary<String> someDomainSpecificThing() {
        ...
    }
}

它们非常有用,所以我希望能够在不同的测试类中使用它们,而不是指定它们的地方。例如:


class MyTestClass {

    @Property
    void testThing(@ForAll("someDomainSpecificThing") String thing) {
        ...
    }
}

但是,jqwik 无法发现此 Provider,因为它位于当前类之外。当然,我可以从另一个类手动导入提供程序并在这个类中设置一个新的提供程序,但这一切都感觉有点笨拙。

有没有办法直接使用另一个文件中指定的提供者?

4

1 回答 1

1

jqwik 的提供者共享机制称为“域”。jqwik 的用户指南中有一整章的内容。

在您的示例中,您可以像这样引入域上下文类:

class MyDomainContext extends AbstractContextBase {
    @Provide 
    public Arbitrary<String> someDomainSpecificThing() {
        /// return whatever
    }
}

然后在您的属性中使用上下文:

class MyTestClass {

    @Property
    @Domain(MyDomainContext.class)
    void testThing(@ForAll String thing) {
        ...
    }
}
于 2021-12-17T14:01:57.050 回答