我想编写一个 ParameterizedTest 来帮助 MethodSource 生成一系列随机值。现在我想知道是否有任何“声明性”方法来限制运行的测试数量。
@ParameterizedTest
@MethodSource("create64RandomBytes")
// @SomeLimitAnnotation(100) wanted here
void testStuff(byte[] randomBytes) {
// ...
}
static Stream<Arguments> create64RandomBytes() {
Random rnd = new Random(42l);
return Stream.generate(() -> {
byte[] bytes = new byte[64];
rnd.nextBytes(bytes);
return Arguments.of(bytes);
}).limit(100); // I want to avoid this "limit" call
}
当然,我可以限制流中的项目数量,但由于
@MethodSource
是为消费流而构建的(当然 JUnit 开发人员知道无限流),我想知道是否有更好的方法来做到这一点。
TLDR:我可以用测试方法上的注释替换limit(100)
调用吗?
@RegisterExtension
static final IntegerResolver integerResolver = new IntegerResolver();
static class IntegerResolver implements ParameterResolver {
@Override
public boolean supportsParameter(
ParameterContext parameterContext,
ExtensionContext extensionContext
) {
return parameterContext.getParameter().getType() == int.class;
}
@Override
public Object resolveParameter(
ParameterContext parameterContext,
ExtensionContext extensionContext
) {
return 100;
}
}
@ParameterizedTest
@MethodSource("create64RandomBytes")
void myTest(byte[] randomBytes) {
// ...
}
static Stream<Arguments> create64RandomBytes(int count) {
Random rnd = new Random(42l);
return Stream.generate(() -> {
byte[] bytes = new byte[64];
rnd.nextBytes(bytes);
return Arguments.of(bytes);
}).limit(count);
}