gpt4 book ai didi

java - 使用系统属性和静态字段迁移到 Maven 时,JUnit 类加载器出现问题

转载 作者:行者123 更新时间:2023-11-30 02:55:06 25 4
gpt4 key购买 nike

我正在努力将我们的旧版本从使用 Ant 转换为 Maven(3.3.3,如果这很重要),但遇到了障碍。我们的代码库有一个类,它从系统属性初始化私有(private)静态字段,该字段通常由应用程序调用时的启动脚本填充。执行此代码的单元测试是在执行测试之前设置系统属性。在 Ant 中或通过 Eclipse JUnit 运行程序运行单元测试时,一切正常。通过maven运行时,似乎在单元测试执行之前静态字段被初始化,导致属性不存在,并且测试失败。

我已经整理了一个示例类和单元测试来进行演示,因为我不允许在此处发布实际代码。

package foo.bar;

public class ValueClass {
private static final String SAMPLE_FIELD = "Foo " + System.getProperty("target.value");

private final myValueField;

public ValueClass() {
myValueField = "random text " + SAMPLE_FIELD;
}

public String getValueField() {
return myValueField;
}
}

以及相应的单元测试:

package foo.bar;

import org.junit.Test;
import org.junit.BeforeClass;

public class ValueClassTest {

@BeforeClass
public static void setupBeforeClasses() {
System.setProperty("target.value", "value from test");
}

@Test
public void testGetValueField() {
String expected = "random text Foo value from test";

ValuesClass valuesClassInstance = new ValuesClass();

String actual = valuesClassInstance.getValueField();

assertEquals(expected, actual);
}
}

正如我提到的,当我使用 Ant 或 Eclipse 执行时,一切正常。我尝试过一些日志记录(将一些日志消息放入 ValueClass 中的静态 block 中),并确定在 Eclipse 或 Ant 中运行时,会在 testGetValueField 方法执行期间加载该类,而在 Maven 中,会加载该类在执行 setupBeforeClasses 方法之前的某个时间。这会导致 SAMPLE_FIELD 使用“target.value”系统属性中的空值进行初始化。

非常感谢任何帮助!罗布

最佳答案

如果您可以从 pom.xml 设置系统属性,则停止从 @BeforeClass 方法执行此操作,并且 try this :

<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<systemPropertyVariables>
<propertyName>propertyValue</propertyName>
<buildDirectory>${project.build.directory}</buildDirectory>
[...]
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>

关于java - 使用系统属性和静态字段迁移到 Maven 时,JUnit 类加载器出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37466934/

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