我有一段使用环境变量的 Java 代码,代码的行为取决于该变量的值。我想用不同的环境变量值测试这段代码。我怎样才能在 JUnit 中做到这一点?
我已经看到了一般 在 Java 中设置环境变量的一些方法,但我对它的单元测试方面更感兴趣,尤其是考虑到测试不应相互干扰。
原文由 vitaut 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一段使用环境变量的 Java 代码,代码的行为取决于该变量的值。我想用不同的环境变量值测试这段代码。我怎样才能在 JUnit 中做到这一点?
我已经看到了一般 在 Java 中设置环境变量的一些方法,但我对它的单元测试方面更感兴趣,尤其是考虑到测试不应相互干扰。
原文由 vitaut 发布,翻译遵循 CC BY-SA 4.0 许可协议
通常的解决方案是创建一个类来管理对这个环境变量的访问,然后你可以在你的测试类中模拟它。
public class Environment {
public String getVariable() {
return System.getenv(); // or whatever
}
}
public class ServiceTest {
private static class MockEnvironment {
public String getVariable() {
return "foobar";
}
}
@Test public void testService() {
service.doSomething(new MockEnvironment());
}
}
然后被测类使用 Environment 类获取环境变量,而不是直接从 System.getenv() 获取。
原文由 Matthew Farwell 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
系统 Lambda 库有一个方法
withEnvironmentVariable
用于设置环境变量。对于 Java 5 到 7, 系统规则 库有一个名为
EnvironmentVariables
的 JUnit 规则。完全披露:我是这两个库的作者。