我有一段使用环境变量的 Java 代码,代码的行为取决于这个变量的值。我想用不同的环境变量值来测试这段代码。我怎样才能在 JUnit 中做到这一点?
我已经看到了一些在 Java中设置环境变量的方法,但我对它的单元测试方面更感兴趣,特别是考虑到测试不应该相互干扰。
库System Lambda具有withEnvironmentVariables设置环境变量的方法。
withEnvironmentVariables
import static com.github.stefanbirkner.systemlambda.SystemLambda.*; public void EnvironmentVariablesTest { @Test public void setEnvironmentVariable() { String value = withEnvironmentVariable("name", "value") .execute(() -> System.getenv("name")); assertEquals("value", value); } }
对于 Java 5 到 7,库系统规则有一个名为EnvironmentVariables.
EnvironmentVariables
import org.junit.contrib.java.lang.system.EnvironmentVariables; public class EnvironmentVariablesTest { @Rule public final EnvironmentVariables environmentVariables = new EnvironmentVariables(); @Test public void setEnvironmentVariable() { environmentVariables.set("name", "value"); assertEquals("value", System.getenv("name")); } }
完全披露:我是这两个库的作者。