为了账号安全,请及时绑定邮箱和手机立即绑定

根据测试注释加载属性

根据测试注释加载属性

MMTTMM 2023-07-13 14:12:01
有没有办法用注释或类似的东西告诉测试,根据自定义注释加载属性并运行与测试具有的参数数量相同的测试。例如:我想运行测试 A,其中注入了 Spring @value 的值三次,对于运行 1,我希望测试从属性文件 X 获取属性文件 X 的值,然后从属性文件 Y 获取运行 2 的值,然后运行3 来自属性文件 Z.@Value("${person.name}")private String person.name;@RunTestWithProperties(properties = {X,Y,Z})@Testpublic void testA() {(System.out.println(person.name); }在第一次运行时,此测试将从 X 属性文件打印 person.name,在第二次运行时,测试将从 Y 打印 person.name,依此类推。预期会发生什么:testA 从文件 X、Y 和 Z 运行 3 次(每次运行具有不同的属性);我可以使用数据提供程序或类似的东西,使用系统变量加载属性,但这不是我想要的解决方案。我使用的技术是 Java、TestNG 和 Spring。任何解决方案都非常受欢迎。提前谢谢你们了!
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

您可以使用参数化测试。您需要创建一个注释的方法,@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);

}

}


查看完整回答
反对 回复 2023-07-13
  • 1 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信