基于测试注解加载属性
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);
}
}
有没有办法告诉带有注释或类似东西的测试,根据自定义注释加载属性,运行 测试与测试具有的参数数量相等。
例如: 我想 运行 测试 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);
}
}