@Retention(value=RUNTIME) @Target(value={METHOD,TYPE}) @Repeatable(value=SetEnvironmentVariable.SetEnvironmentVariables.class) @ExtendWith(value=org.junitpioneer.jupiter.EnvironmentVariableExtension.class) public @interface SetEnvironmentVariable
@SetEnvironmentVariable
is a JUnit Jupiter extension to set the value of a
environment variable for a test execution.
The key and value of the environment variable to be set must be specified via
key()
and value()
. After the annotated method has been
executed, the initial default value is restored.
SetEnvironmentVariable
is repeatable and can be used on the method and on
the class level. If a class is annotated, the configured variable will be set
for all tests inside that class. Any method level configurations will
override the class level configurations.
WARNING: Java considers environment variables to be immutable, so this extension
uses reflection to change them. This requires that the SecurityManager
allows modifications and can potentially break on different operating systems and
Java versions. Be aware that this is a fragile solution and consider finding a
better one for your specific situation. If you're running on Java 9 or later, you
may have to add --add-opens=java.base/java.util=ALL-UNNAMED
to your test
execution to prevent warnings or even errors.
For more details and examples, see
the documentation on @ClearEnvironmentVariable and @SetEnvironmentVariable
.