Как использовать 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) {
...
}
}