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

如何在@ForAll参数中使用其他类中定义的jqwik @Provider生成器?

jqwik跨类共享Provider生成器的解决方案

jqwik默认仅扫描当前测试类内标注了@Provide的生成器方法,跨类复用公共生成器可以通过官方提供的域(Domain)机制实现,无需手动对接冗余代码。


方案1:按需引用域(推荐,控制可见范围)

步骤1:给公共生成器类标注@Domain注解

import net.jqwik.api.Provide;
import net.jqwik.api.Arbitrary;
import net.jqwik.api.domains.Domain;

@Domain
public class MyUsefulGenerators {

    @Provide 
    public Arbitrary<String> someDomainSpecificThing() {
        // 原有生成逻辑
    }
}

步骤2:在需要使用的测试类上引用该域

import net.jqwik.api.Property;
import net.jqwik.api.ForAll;
import net.jqwik.api.domains.Domain;

// 导入对应公共生成器域,即可直接使用类内所有@Provide方法
@Domain(MyUsefulGenerators.class)
public class MyTestClass {

    @Property
    void testThing(@ForAll("someDomainSpecificThing") String thing) {
        // 原有测试逻辑
    }
}

你可以根据需求在任意测试类上添加多个@Domain注解,导入不同的公共生成器类。


方案2:全局注册域(全测试集自动生效)

如果你的公共生成器需要在所有测试类中使用,不想逐个添加@Domain注解,可以通过服务注册机制全局生效:

  • 在项目的测试资源目录下创建路径:META-INF/services/net.jqwik.api.domains.DomainContextProvider
  • 在该文件内写入你的公共生成器类的全限定名(例如:com.yourpackage.MyUsefulGenerators)
  • 所有测试类无需额外配置,即可直接使用该类下的所有@Provide生成器。

内容的提问来源于stack exchange,提问作者I was in the neighborhood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:06:08