Предполагая, что вам нужен список (итерируемый) карт с одной записью, я вижу два основных варианта.
Вариант 1 - Используйте Arbitrary.list()
для создания списка и укажите минимальный и максимальный размер непосредственно в коде генератора:
@Provide
Arbitrary<List<Map<String, Object>>> generateInputMapElements() {
Arbitrary<Double> metricValueArb = Arbitraries.doubles()
.between(0, 50.0);
return metricValueArb
.map(metricsValue -> {
Map<String, Object> inputMap = new HashMap<>();
inputMap.put(Utils.METRIC_VALUE, metricsValue);
return inputMap;
})
.list().ofMinSize(1).ofMaxSize(10);
}
Вариант 2 - Генерация только отдельных карт и использование стандартных аннотацийдля повторяемого:
@Property
@Report(Reporting.GENERATED)
boolean statusReturnedFromApplyingRule2(
@ForAll("generateRule") Rule rule,
@ForAll @Size(min = 1, max = 10) Iterable<@From("generateInputMap") Map<String, Object>> elements
) {
...
}
@Provide
Arbitrary<Map<String, Object>> generateInputMap() {
Arbitrary<Double> metricValueArb = Arbitraries.doubles()
.between(0, 50.0);
return metricValueArb
.map(metricsValue -> {
Map<String, Object> inputMap = new HashMap<>();
inputMap.put(Utils.METRIC_VALUE, metricsValue);
return inputMap;
});
}
Я бы лично выбрал вариант 2, потому что он требует меньше кода. YMMV хотя.