gpt4 book ai didi

java - 如何重用 JUnit Jupiter @MethodSource 进行多个参数化测试

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:19:17 32 4
gpt4 key购买 nike

假设我有以下代码:

class Testing {

String[] text() {
String[] text = { "A", "B" };
return text;

}

@Nested
class NestedTesting {

@ParameterizedTest
@MethodSource("text")
void A(String text) {

System.out.println(text);

}

@ParameterizedTest
@MethodSource("text")
void B(String text) {

System.out.println(text);

}
}
}

当我运行它时,我得到:

未找到测试运行程序“JUnit 5”的测试。

我怎样才能让它发挥作用?我是 Java 的初学者,所以我可能忘记了一些明显的东西

最佳答案

最简单的方法是通过完全限定的方法名称引用静态工厂方法——例如,@MethodSource("example.Testing#text ()")

为了进一步简化问题,您可以引入自定义组合注解,它结合了@ParameterizedTest@MethodSource 的配置,如下所示:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@ParameterizedTest
@MethodSource("example.Testing#text()")
public @interface ParameterizedTextTest {
}

然后您可以像这样重用它:

package example;

import org.junit.jupiter.api.Nested;

class Testing {

static String[] text() {
return new String[] { "A", "B" };
}

@Nested
class NestedTesting {

@ParameterizedTextTest
void testA(String text) {
System.out.println(text);
}

@ParameterizedTextTest
void testB(String text) {
System.out.println(text);
}
}
}

测试愉快!

关于java - 如何重用 JUnit Jupiter @MethodSource 进行多个参数化测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57629096/

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