【问题标题】:How to Mock System Class for Testing?如何模拟系统类进行测试?
【发布时间】:2014-10-23 05:50:45
【问题描述】:

我有一个代码要测试,它取决于环境变量集的值。 如何模拟系统环境变量的设置? 我不想在我的测试类中执行 System.setProperty(),这可能会将变量添加到环境中。

我只想模拟设置和测试。如何模拟它??

谢谢。

【问题讨论】:

    标签: spring unit-testing integration-testing spring-batch spring-boot


    【解决方案1】:

    如果您的代码确实依赖于系统属性,我建议将其重构为依赖于 Spring Environment。然后您可以在您的 Spring 测试中使用(无论如何使用 Spring Boot)@IntegrationTest,例如(来自the docs):

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringApplicationConfiguration(classes = MyApplication.class)
    @IntegrationTest({"foo=bar"})
    public class SomeIntegrationTests {
    
    // ...
    
    }
    

    【讨论】:

    • 所以现在我在我的一个测试类中添加了@IntegrationTest({"SPRING_PROFILES_ACTIVE=default"}),如果我尝试在我的测试类中添加@IntegrationTest({"SPRING_PROFILES_ACTIVE=integration"})其他类,那行不通!!它仍然获取默认值。我该如何处理?
    • 我不关注。你的“其他班级”是什么?
    • 如果你想激活配置文件,只需在测试用例上使用@ActiveProfile
    • 我正在分别编写 2 个测试类来测试我在 yml 文件中的配置文件。我的 yml 文件中有 2 个配置文件:默认和集成 我正在设置 SPRING_PROFILES_ACTIVE 环境变量来激活我的配置文件特定值。所以现在我想为每个配置文件编写测试类。在我的一个测试类中添加 @IntegrationTest({"SPRING_PROFILES_ACTIVE=default"}) 工作正常,当我编写另一个测试类并尝试通过 @IntegrationTest({"SPRING_PROFILES_ACTIVE=integration "}) 激活我的集成配置文件时,我仍然得到我的默认配置文件的值。
    • “不起作用”的信息量不是很大。也许您需要提出一个新问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2019-10-06
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多