public class EnvironmentVariables
extends java.lang.Object
implements org.junit.rules.TestRule
EnvironmentVariables
rule allows you to set environment variables
for your test. All changes to environment variables are reverted after the
test.
public class EnvironmentVariablesTest { @Rule public final EnvironmentVariables environmentVariables = new EnvironmentVariables(); @Test public void test() { environmentVariables.set("name", "value"); assertEquals("value", System.getenv("name")); } }
Common variables can be set directly after creating the rule
public class EnvironmentVariablesTest { @Rule public final EnvironmentVariables environmentVariables = new EnvironmentVariables() .set("name", "value"); @Test public void test() { assertEquals("value", System.getenv("name")); } }
You can ensure that some environment variables are not set by calling
clear(String...)
.
Warning: This rule uses reflection for modifying internals of the
environment variables map. It fails if your SecurityManager
forbids
such modifications.
Modifier and Type | Class and Description |
---|---|
private class |
EnvironmentVariables.EnvironmentVariablesStatement |
Modifier and Type | Field and Description |
---|---|
private java.util.Map<java.lang.String,java.lang.String> |
buffer |
private boolean |
statementIsExecuting |
Constructor and Description |
---|
EnvironmentVariables() |
Modifier and Type | Method and Description |
---|---|
org.junit.runners.model.Statement |
apply(org.junit.runners.model.Statement base,
org.junit.runner.Description description) |
EnvironmentVariables |
clear(java.lang.String... names)
Delete multiple environment variables.
|
private void |
copyVariablesFromBufferToEnvMap() |
private static java.util.Map<java.lang.String,java.lang.String> |
getEditableMapOfVariables() |
private static java.util.Map<java.lang.String,java.lang.String> |
getFieldValue(java.lang.Class<?> klass,
java.lang.Object object,
java.lang.String name) |
private static java.util.Map<java.lang.String,java.lang.String> |
getTheCaseInsensitiveEnvironment() |
private void |
set(java.util.Map<java.lang.String,java.lang.String> variables,
java.lang.String name,
java.lang.String value) |
EnvironmentVariables |
set(java.lang.String name,
java.lang.String value)
Set the value of an environment variable.
|
private void |
writeVariableToBuffer(java.lang.String name,
java.lang.String value) |
private void |
writeVariableToEnvMap(java.lang.String name,
java.lang.String value) |
private final java.util.Map<java.lang.String,java.lang.String> buffer
private boolean statementIsExecuting
public EnvironmentVariables set(java.lang.String name, java.lang.String value)
name
- the environment variable's name.value
- the environment variable's new value. May be null
.public EnvironmentVariables clear(java.lang.String... names)
names
- the environment variables' names.private void writeVariableToEnvMap(java.lang.String name, java.lang.String value)
private void set(java.util.Map<java.lang.String,java.lang.String> variables, java.lang.String name, java.lang.String value)
private void writeVariableToBuffer(java.lang.String name, java.lang.String value)
private void copyVariablesFromBufferToEnvMap()
public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description)
apply
in interface org.junit.rules.TestRule
private static java.util.Map<java.lang.String,java.lang.String> getEditableMapOfVariables()
private static java.util.Map<java.lang.String,java.lang.String> getTheCaseInsensitiveEnvironment()
private static java.util.Map<java.lang.String,java.lang.String> getFieldValue(java.lang.Class<?> klass, java.lang.Object object, java.lang.String name) throws java.lang.NoSuchFieldException, java.lang.IllegalAccessException
java.lang.NoSuchFieldException
java.lang.IllegalAccessException