@ExtendWith(SystemStubsExtension.class)
class TestClass {
@SystemStub
private EnvironmentVariables environmentVariables =
new EnvironmentVariables("demoVar", "val");
@Test
void test() {
// can use the environment
assertThat(System.getenv("demoVar")).isEqualTo("val");
// can also change the environment
environmentVariables.set("foo", "bar");
// environment variables restored to previous state when
// test ends
}
}
5条答案
按热度按时间hjzp0vay1#
根据其他SO回答https://stackoverflow.com/a/59635733/2185719:
有JUnit先锋,一个“JUnit 5扩展包”。
jUnit Pioneer提供了一个注解,用于设置测试的环境变量。
syqv5f0l2#
你不能在实际的java进程中使用,因为使用getenv的这些环境值是不可变的。
一种方法是启动另一个虚拟机或另一个进程,在那里您可以引入新的环境价值。
另一种方法是切换到System.getProperty,但要确保您了解它们之间的区别。
https://www.baeldung.com/java-system-get-property-vs-system-getenv
下面是一个小测试代码:
fbcarpbf3#
这可以通过https://github.com/webcompere/system-stubs/tree/master/system-stubs-jupiter实现
mi7gmzs64#
通常的做法是使用系统属性而不是环境变量。在这种情况下,您将运行java/maven/gradle命令或任何您用来运行测试的命令,并使用选项-D demoVar="{your_value}"。
对于java jar:
您将能够从
System.getProperty("demoVar")
代码中获得它。如果你真的需要使用环境变量,请使用OS功能。
对于Windows PowerShell:
yjghlzjz5#
简单的解决方案如果您使用Gradle,您可以将以下内容添加到您的build中。gradle
Gradle文档链接:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html#org.gradle.api.tasks.testing.Test:environment