基于测试注解加载属性

Load properties based on test annotation

有没有办法告诉带有注释或类似东西的测试,根据自定义注释加载属性,运行 测试与测试具有的参数数量相等。

例如: 我想 运行 测试 A 的值注入了 Spring @value 三次,对于 运行 1 我希望测试从 属性 文件 X 中获取值对于 运行 2 来自 属性 文件 Y,你得到了它,运行 3 来自 属性 文件 Z。

@Value("${person.name}")
private String person.name;

@RunTestWithProperties(properties = {X,Y,Z})
@Test
public void testA() {(System.out.println(person.name); }

On the first run, this test would print the person.name from X properties file, on the second run the test would print the person.name from Y and so on.

预期结果:

testA 运行s 3 次(每次 运行 具有不同的属性)来自文件 X、Y 和 Z;

我可以使用数据提供程序或类似的东西,用系统变量加载属性,但这不是我想要的解决方案。

我使用的技术是 Java、TestNG 和 Spring。任何解决方案都非常受欢迎。

提前谢谢你们!

您可以使用参数化测试。您需要创建一个用 @Parameterized.Parameters 注释的方法,您可以在其中加载集合中的所有数据(基本上是您需要为每个 运行 传递的参数)。

然后创建一个构造函数来传递参数,这个构造函数参数将在每个 运行

上从此集合传递

例如

 @RunWith(Parameterized.class)
 public class RepeatableTests {

 private String name;

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

 @Parameterized.Parameters
 public static List<String> data() {
    return Arrays.asList(new String[]{"Jon","Johny","Rob"});
 }

 @Test
 public void runTest() {
    System.out.println("run --> "+ name);
 }
}

或者如果您不想使用构造函数注入,您可以使用 @Parameter 注释来绑定值

@RunWith(Parameterized.class)
public class RepeatableTests {

@Parameter
public String name;

@Parameterized.Parameters(name="name")
public static List<String> data() {
    return Arrays.asList(new String[]{"Jon","Johny","Rob"});
}

@Test
public void runTest() {
    System.out.println("run --> "+ name);
}
}