java - 使用 SpringJunit4ClassRunner 在属性占位符之前设置系统属性或环境变量

标签 java spring unit-testing properties junit

我有一个主要的 app-context.xml,它定义了一个具有两个位置的属性占位符:默认属性文件和一个可选的覆盖文件:

<context:property-placeholder
        location="classpath:config.properties,${configOverride}"
        ignore-resource-not-found="true" />

可选的覆盖位置允许指定另一个属性文件(例如“-DconfigOverride=file:/home/app/config.properties”),其中仅包含应覆盖的属性。

对于我的单元测试,我使用了导入 app-context.xml 的测试上下文:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:test-context.xml"})
public class UserServiceTest {
    ...
}

如何在加载应用程序上下文之前在应用程序中设置系统属性或环境变量?如果可能的话,我想在所有测试类中实现与设置“-DconfigOverride=classpath:testConfig.properties”相同的效果,而无需指定命令行参数。

最佳答案

另一种选择是在 @BeforeClass 注释方法中设置环境属性,该方法将在上下文配置发生之前调用。

@BeforeClass
public static void setSystemProps() {
    System.setProperty("configOverride", "yourVal");
}

关于java - 使用 SpringJunit4ClassRunner 在属性占位符之前设置系统属性或环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10822010/

相关文章:

java - Selenium/Select Dropdrown/断言某个值是否存在

java - 在Spring中生成一致的资源链接

java - JUnit5 中缺少 org.junit.jupiter.params

java - 使用 Mockito 模拟 java.nio.file.Files 静态方法

java - 无法访问我在 PC 上的 Android 应用程序中创建的文件

java - <String,String> 类型的哈希表正在存储 <String, Integer> 类型的值,正如我在日志猫和调试器中看到的那样。是否可以?

java - listView结果检索并等待用户输入

java - @autowired on Spring 中的方法

java - InternalResourceViewResolver 所在文件的名称

perl - 有没有什么方法可以在没有计划的情况下使用 Test::More 中的 diag() ?