猿问

根据测试注释加载属性

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


例如:我想运行测试 A,其中注入了 Spring @value 的值三次,对于运行 1,我希望测试从属性文件 X 获取属性文件 X 的值,然后从属性文件 Y 获取运行 2 的值,然后运行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。任何解决方案都非常受欢迎。


提前谢谢你们了!


MMTTMM
浏览 64回答 1
1回答

郎朗坤

您可以使用参数化测试。您需要创建一个注释的方法,@Parameterized.Parameters您可以在其中加载集合中的所有数据(基本上是每次运行需要传递的参数)。然后创建一个构造函数来传递参数,并且该构造函数参数将在每次运行时从此集合中传递例如&nbsp;@RunWith(Parameterized.class)&nbsp;public class RepeatableTests {&nbsp;private String name;&nbsp;public RepeatableTests(String name) {&nbsp; &nbsp; this.name = name;&nbsp;}&nbsp;@Parameterized.Parameters&nbsp;public static List<String> data() {&nbsp; &nbsp; return Arrays.asList(new String[]{"Jon","Johny","Rob"});&nbsp;}&nbsp;@Test&nbsp;public void runTest() {&nbsp; &nbsp; System.out.println("run --> "+ name);&nbsp;}}或者,如果您不想使用构造函数注入,您可以使用@Parameter注释来绑定值@RunWith(Parameterized.class)public class RepeatableTests {@Parameterpublic String name;@Parameterized.Parameters(name="name")public static List<String> data() {&nbsp; &nbsp; return Arrays.asList(new String[]{"Jon","Johny","Rob"});}@Testpublic void runTest() {&nbsp; &nbsp; System.out.println("run --> "+ name);}}
随时随地看视频慕课网APP

相关分类

Java
我要回答