限制参数化测试中参数的无限流

问题描述 投票:0回答:1

我想编写一个 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)

调用吗?

    

java junit junit5 parameterized parameterized-unit-test
1个回答
0
投票

@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); }

© www.soinside.com 2019 - 2024. All rights reserved.