有一种方法可以告诉Test带有批注或类似内容的方法,以基于自定义批注加载属性,并根据测试所具有的参数数量相等地运行测试。
例如: 我想运行测试A,该测试的值注入了Spring @value 3次,对于运行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); }
在第一次运行时,此测试将打印X中的person.name 属性文件,在第二次运行时测试将打印 来自Y的person.name等等。
会发生什么:
testA从文件X,Y和Z运行3次(每次运行都具有不同的属性);
我可以使用数据提供程序或类似的方法,使用系统变量加载属性,但这不是我想要的解决方案。
我使用的技术是Java,TestNG和Spring。任何解决方案都值得欢迎。
先谢谢大家!
答案 0 :(得分:0)
您可以使用参数化测试。您需要创建一个带有@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);
}
}