gpt4 book ai didi

java - 根据测试注释加载属性

转载 作者:行者123 更新时间:2023-12-02 00:58:25 24 4
gpt4 key购买 nike

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

例如:我想运行测试 A,它的值注入(inject)了 Spring @value 三次,对于运行 1,我希望测试从属性文件 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); }

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 从文件 X、Y 和 Z 运行 3 次(每次运行具有不同的属性);

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

我使用的技术是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);
}
}

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

@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);
}
}

关于java - 根据测试注释加载属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57789577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com