@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
}
}
6条答案
按热度按时间klr1opcd1#
从另一个SO答案https://stackoverflow.com/a/59635733/2185719:
JUnit Pioneer是一个“JUnit 5扩展包”。
jUnit Pioneer提供了一个注解,为测试设置环境变量。举例来说:
p5fdfcr12#
你不能在实际的java进程中使用getenv,因为这些环境值是不可变的。
一种方法是启动另一个虚拟机或另一个进程,您可以在其中引入新的环境值。
另一种方法是切换到System.getProperty,但请确保您了解其中的差异。
https://www.baeldung.com/java-system-get-property-vs-system-getenv
下面是一个小测试代码:
arknldoa3#
这可以通过https://github.com/webcompere/system-stubs/tree/master/system-stubs-jupiter实现
flvlnr444#
简单的解决方案如果您使用Gradle,您可以将以下内容添加到您的构建中。
Gradle文档链接:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html#org.gradle.api.tasks.testing.Test:environment
wmomyfyw5#
通常的做法是使用系统属性而不是环境变量。在这种情况下,您将使用选项-D demoVar="{your_value}"运行java/maven/gradle命令或任何用于运行测试的命令。关于Maven Goal:
java jar:
你可以从
System.getProperty("demoVar")
的代码中得到它。如果你真的需要使用环境变量,请使用操作系统功能。对于Linux:
对于Windows PowerShell:
gk7wooem6#
以下是使用KotlinDSL(build.gradle.kts)的解决方案:
环境变量在测试和主代码中都可用: