我正在使用JUnit 5进行工作。我的Java代码使用
在JUnit 5测试类中,我如何设置这个环境变量,以便在测试期间我的代码可以访问它的值?
System.getenv("demoVar")
来访问环境变量。在JUnit 5测试类中,我如何设置这个环境变量,以便在测试期间我的代码可以访问它的值?
System.getenv("demoVar")
来访问环境变量。从另一个Stack Overflow答案https://dev59.com/yVYN5IYBdhLWcg3w07Bx#59635733中得知:
有一个“JUnit 5扩展包”——JUnit Pioneer。
jUnit Pioneer提供了一个注释,用于为测试设置环境变量。例如:
@Test
@SetEnvironmentVariable(key = "PATH", value = "")
void testPath_isEmpty() {
assertThat(System.getenv("PATH")).isEmpty();
}
您无法通过使用getenv来更改这些环境值,因为它们是不可变的。一种方法是启动另一个虚拟机或另一个进程,在其中可以引入新的环境值。
另一种方法是切换到System.getProperty,但务必了解其差异。
https://www.baeldung.com/java-system-get-property-vs-system-getenv
这里是一个小测试代码:
public class EnvironmentVarsTest {
private static int counter = 0;
@BeforeEach
public void setUp() {
counter = counter + 1;
System.setProperty("simple_test_env_property", String.valueOf(counter));
}
@Test
public void testFirst() {
printOutValues();
}
@Test
public void testSecond() {
printOutValues();
}
private void printOutValues() {
System.out.println("--------------------");
System.out.println("val=" + counter);
System.out.println("envval=" + System.getProperty("simple_test_env_property"));
}
}
@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
}
}
如果你使用Gradle,那么一个简单的解决方案是在你的build.gradle文件中添加以下内容:
test {
environment "ENV_VAR_NAME", "ENV_VAR_VALUE"
}
tasks.withType<Test> {
environment["myFirst"] = "bunny"
// OR
environment(
"mySecond" to "7249",
"myThird" to "curtain"
)
}
val name = System.getenv().get("myFirst")
附注:您还可以根据环境变量禁用/启用您的测试:
@Test
@EnabledIfEnvironmentVariable(named = "myFirst", matches = "bunny", disabledReason = "Oh no")
public void myTest() {
// ...
}
maven clean install -DdemoVar="test"
适用于Java Jar:
java -jar xxx.jar -DdemoVar="test"
您可以通过代码获取它,使用 System.getProperty("demoVar")
。
如果您确实需要使用环境变量,请使用操作系统功能。对于Linux:
demoVar="test" mvn clean install
对于 Windows PowerShell:
$env:demoVar = 'test'; mvn clean install
$env:demoVar = 'test'; mvn clean install
- 快速简单且有效。 - MeIr