gpt4 book ai didi

java - 如何重复参数化的 Junit 5 测试?

转载 作者:行者123 更新时间:2023-12-05 06:04:58 25 4
gpt4 key购买 nike

有没有办法将 @RepeatedTest 注释与 @TestTemplate 一起使用?

目标是为每种类型的 Dependency 运行多次测试,它由 Extension 类注入(inject)。

    @TestTemplate
@RepeatedTest(100)
@Timeout(1)
void test(final Dependency dep) throws Exception {
....
}

最佳答案

注意:下面的示例提供了使用自定义 Dependency 类实现的自定义 @TestTemplate 的实现

考虑一下:

import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.api.extension.*;

import java.util.Collections;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class RepeatedParametrizedTest {

@TestTemplate
@ExtendWith(MyTemplate.class)
@Timeout(1)
void test(final Dependency dep) {
assertEquals(true, true);
}
}

class Dependency {

private final String name;

public Dependency(String name) {
this.name = name;
}

public String getName() {
return name;
}

@Override
public String toString() {
return name;
}

}

class MyTemplate implements TestTemplateInvocationContextProvider {

@Override
public boolean supportsTestTemplate(ExtensionContext context) {
return true;
}

@Override
public Stream<TestTemplateInvocationContext> provideTestTemplateInvocationContexts(ExtensionContext context) {
// here goes your implementation of all possible Dependency objects wrapped in invocationContext()
return IntStream.range(0, 100)
.flatMap(n -> IntStream.range(1, 10))
.mapToObj(n -> invocationContext(new Dependency("dependency" + n)));
}

private TestTemplateInvocationContext invocationContext(Dependency dependency) {
return new TestTemplateInvocationContext() {
@Override
public String getDisplayName(int invocationIndex) {
return dependency.getName();
}

@Override
public List<Extension> getAdditionalExtensions() {
return Collections.singletonList(new ParameterResolver() {
@Override
public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) {
return parameterContext.getParameter().getType().equals(Dependency.class);
}

@Override
public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) {
return dependency;
}
});
}
};
}
}

对于 10 * 10 个实例会产生:

IntelliJ IDEA test output

关于java - 如何重复参数化的 Junit 5 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66139122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com