Как использовать jqwik @Provider, указанный в другом классе, как часть параметра @ForAll?

У нас есть набор генераторов, указанных в классе.

      class MyUsefulGenerators {

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

Они широко полезны, поэтому я хотел бы иметь возможность использовать их в разных тестовых классах, отличных от тех, где они указаны. Например:

      
class MyTestClass {

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

Однако jqwik не может обнаружить этого провайдера, поскольку он находится за пределами текущего класса. Я могу, конечно, вручную импортировать поставщика из другого класса и настроить нового поставщика в этом, но все это выглядит немного странно.

Есть ли способ напрямую использовать провайдера, указанного в другом файле?

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) {
        ...
    }
}
Другие вопросы по тегам