gpt4 book ai didi

java - Junit参数化设置测试类中的常量

转载 作者:太空宇宙 更新时间:2023-11-04 10:57:55 24 4
gpt4 key购买 nike

我正在尝试运行参数化的 junit 测试,其中参数在测试中必须保持不变,因此我使用反射来设置该参数。然而它并不太有效。在下面的示例中,它始终打印 Testing with: param-1。我该如何解决这个问题?令人惊讶的是,我在调试器中为不同的运行实例获得了正确的 PARAM_NAME (param-1、param-2、param-2)值,但它在控制台上始终打印为“param-1”,并且在测试中也用作“param-1”。这可以部分解释为注释是在编译时评估的,因此注释中的值在运行时不能更改?

@RunWith(Parameterized.class)
public class SomeTest {

private final String PARAM_NAME = "param-1";

public SomeTest(String someParam){
org.springframework.test.util.ReflectionTestUtils.setField(this, "PARAM_NAME", someParam);
}

@Parameterized.Parameters
public static Collection parameters() {
return Arrays.asList(new Object[][] {
{ "param-1" },
{ "param-2" },
{ "param-3" }
});
}

@Test
@ExternalAnnotation(PARAM_NAME) //needs constant in annotation
public void testSomething() throws Exception {
System.out.println("Testing with: "+PARAM_NAME); //always prints param-1
//some tests
}
}

最佳答案

注释值由 JVM 缓存,您无法在运行时更改它。我能想到的实现您想要做的事情的唯一可能的方法是通过源代码生成以编程方式生成测试类(基于模板,或使用像 JCodeModel 这样的库)。如果您在测试编译之前的生命周期阶段执行此操作(假设您使用的是 Maven 或 Gradle 等构建系统),那么您应该相对容易地启动和运行。

关于java - Junit参数化设置测试类中的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47195465/

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