diff --git a/testing-modules/testing-libraries-2/pom.xml b/testing-modules/testing-libraries-2/pom.xml
index 4cc3ea8428..717ccac2b2 100644
--- a/testing-modules/testing-libraries-2/pom.xml
+++ b/testing-modules/testing-libraries-2/pom.xml
@@ -53,6 +53,30 @@
${system-stubs.version}
test
+
+ uk.org.webcompere
+ system-stubs-testng
+ ${system-stubs.version}
+ test
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+ org.junit-pioneer
+ junit-pioneer
+ ${junit.pioneer.version}
+ test
+
+
+ org.testng
+ testng
+ ${testng.version}
+ test
+
@@ -127,6 +151,9 @@
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/java.lang=ALL-UNNAMED
+
+ YES
+
@@ -142,7 +169,10 @@
0.8.6
1.19.0
1.0.0
- 1.1.0
+ 2.1.3
+ 7.8.0
+ 3.24.2
+ 2.1.0
\ No newline at end of file
diff --git a/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesByAbstractionUnitTest.java b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesByAbstractionUnitTest.java
new file mode 100644
index 0000000000..0ac0603c64
--- /dev/null
+++ b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesByAbstractionUnitTest.java
@@ -0,0 +1,37 @@
+package com.baeldung.environmentvariablesfortest;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class EnvironmentVariablesByAbstractionUnitTest {
+
+ @FunctionalInterface
+ interface GetEnv {
+ String get(String name);
+ }
+
+ static class ReadsEnvironment {
+ private GetEnv getEnv;
+
+ public ReadsEnvironment(GetEnv getEnv) {
+ this.getEnv = getEnv;
+ }
+
+ public String whatOs() {
+ return getEnv.get("OS");
+ }
+ }
+
+ @Test
+ void givenFakeOs_thenCanReadIt() {
+ Map fakeEnv = new HashMap<>();
+ fakeEnv.put("OS", "MacDowsNix");
+
+ ReadsEnvironment reader = new ReadsEnvironment(fakeEnv::get);
+ assertThat(reader.whatOs()).isEqualTo("MacDowsNix");
+ }
+}
diff --git a/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSetByJUnitPioneerUnitTest.java b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSetByJUnitPioneerUnitTest.java
new file mode 100644
index 0000000000..02081a6598
--- /dev/null
+++ b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSetByJUnitPioneerUnitTest.java
@@ -0,0 +1,22 @@
+package com.baeldung.environmentvariablesfortest;
+
+import org.junit.jupiter.api.Test;
+import org.junitpioneer.jupiter.ClearEnvironmentVariable;
+import org.junitpioneer.jupiter.SetEnvironmentVariable;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@SetEnvironmentVariable(key = "pioneer", value = "is pioneering")
+class EnvironmentVariablesSetByJUnitPioneerUnitTest {
+
+ @Test
+ void givenEnvironmentVariableIsSetForClass_thenVariableCanBeRead() {
+ assertThat(System.getenv("pioneer")).isEqualTo("is pioneering");
+ }
+
+ @ClearEnvironmentVariable(key = "pioneer")
+ @Test
+ void givenEnvironmentVariableIsClear_thenItIsNotSet() {
+ assertThat(System.getenv("pioneer")).isNull();
+ }
+}
diff --git a/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSetDirectlyUnitTest.java b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSetDirectlyUnitTest.java
new file mode 100644
index 0000000000..61a3ca3c2e
--- /dev/null
+++ b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSetDirectlyUnitTest.java
@@ -0,0 +1,33 @@
+package com.baeldung.environmentvariablesfortest;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.EnabledForJreRange;
+import org.junit.jupiter.api.condition.JRE;
+
+import java.lang.reflect.Field;
+import java.util.Map;
+import static org.assertj.core.api.Assertions.assertThat;
+
+@EnabledForJreRange(min = JRE.JAVA_8, max = JRE.JAVA_16)
+class EnvironmentVariablesSetDirectlyUnitTest {
+ @BeforeAll
+ static void beforeAll() throws Exception {
+ Class> classOfMap = System.getenv().getClass();
+ Field field = classOfMap.getDeclaredField("m");
+ field.setAccessible(true);
+ Map writeableEnvironmentVariables = (Map)field.get(System.getenv());
+
+ writeableEnvironmentVariables.put("baeldung", "has set an environment variable");
+ }
+
+ @Test
+ void givenEnvironmentVariableWasSet_thenCanReadIt() {
+ assertThat(System.getenv("baeldung")).isEqualTo("has set an environment variable");
+ }
+
+ @Test
+ void givenEnvironmentVariableSetBySurefire_thenCanReadIt() {
+ assertThat(System.getenv("SET_BY_SUREFIRE")).isEqualTo("YES");
+ }
+}
diff --git a/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemLambdaUnitTest.java b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemLambdaUnitTest.java
new file mode 100644
index 0000000000..050bebddfd
--- /dev/null
+++ b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemLambdaUnitTest.java
@@ -0,0 +1,18 @@
+package com.baeldung.environmentvariablesfortest;
+
+import org.junit.jupiter.api.Test;
+
+import static com.github.stefanbirkner.systemlambda.SystemLambda.withEnvironmentVariable;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class EnvironmentVariablesSystemLambdaUnitTest {
+
+ @Test
+ void givenSetEnvironmentVariablesInTest_thenCanBeRead() throws Exception {
+ withEnvironmentVariable("system lambda", "in test")
+ .execute(() -> {
+ assertThat(System.getenv("system lambda")).isEqualTo("in test");
+ });
+ }
+}
diff --git a/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemRulesUnitTest.java b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemRulesUnitTest.java
new file mode 100644
index 0000000000..44ebb1be71
--- /dev/null
+++ b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemRulesUnitTest.java
@@ -0,0 +1,23 @@
+package com.baeldung.environmentvariablesfortest;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.contrib.java.lang.system.EnvironmentVariables;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class EnvironmentVariablesSystemRulesUnitTest {
+ @Rule
+ public EnvironmentVariables environmentVariablesRule = new EnvironmentVariables();
+
+ @Before
+ public void before() {
+ environmentVariablesRule.set("system rules", "works");
+ }
+
+ @Test
+ public void givenEnvironmentVariable_thenCanReadIt() {
+ assertThat(System.getenv("system rules")).isEqualTo("works");
+ }
+}
diff --git a/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsJUnit4UnitTest.java b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsJUnit4UnitTest.java
new file mode 100644
index 0000000000..efb0ba5598
--- /dev/null
+++ b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsJUnit4UnitTest.java
@@ -0,0 +1,18 @@
+package com.baeldung.environmentvariablesfortest;
+
+import org.junit.Rule;
+import org.junit.Test;
+import uk.org.webcompere.systemstubs.rules.EnvironmentVariablesRule;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class EnvironmentVariablesSystemStubsJUnit4UnitTest {
+ @Rule
+ public EnvironmentVariablesRule environmentVariablesRule =
+ new EnvironmentVariablesRule("system stubs", "initializes variable");
+
+ @Test
+ public void givenEnvironmentSetUpInObject_thenCanReadIt() {
+ assertThat(System.getenv("system stubs")).isEqualTo("initializes variable");
+ }
+}
diff --git a/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsJUnit5UnitTest.java b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsJUnit5UnitTest.java
new file mode 100644
index 0000000000..1304e4921a
--- /dev/null
+++ b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsJUnit5UnitTest.java
@@ -0,0 +1,27 @@
+package com.baeldung.environmentvariablesfortest;
+
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
+import uk.org.webcompere.systemstubs.jupiter.SystemStub;
+import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension;
+import static org.assertj.core.api.Assertions.assertThat;
+
+@ExtendWith(SystemStubsExtension.class)
+class EnvironmentVariablesSystemStubsJUnit5UnitTest {
+
+ @SystemStub
+ private EnvironmentVariables environmentVariables;
+
+ @BeforeEach
+ void beforeEach() {
+ environmentVariables.set("systemstubs", "creates stub objects");
+ }
+
+ @Test
+ void givenEnvironmentVariableHasBeenSet_thenCanReadIt() {
+ assertThat(System.getenv("systemstubs")).isEqualTo("creates stub objects");
+ }
+}
diff --git a/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsNoFrameworkClassScopeEnvironmentUnitTest.java b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsNoFrameworkClassScopeEnvironmentUnitTest.java
new file mode 100644
index 0000000000..9e9421c3f1
--- /dev/null
+++ b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsNoFrameworkClassScopeEnvironmentUnitTest.java
@@ -0,0 +1,28 @@
+package com.baeldung.environmentvariablesfortest;
+
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class EnvironmentVariablesSystemStubsNoFrameworkClassScopeEnvironmentUnitTest {
+ private static EnvironmentVariables environmentVariables = new EnvironmentVariables();
+
+ @BeforeAll
+ static void beforeAll() throws Exception {
+ environmentVariables.set("system stubs", "in test");
+ environmentVariables.setup();
+ }
+
+ @AfterAll
+ static void afterAll() throws Exception {
+ environmentVariables.teardown();
+ }
+
+ @Test
+ void givenSetEnvironmentVariablesBeforeAll_thenCanBeRead() throws Exception {
+ assertThat(System.getenv("system stubs")).isEqualTo("in test");
+ }
+}
diff --git a/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsNoFrameworkUnitTest.java b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsNoFrameworkUnitTest.java
new file mode 100644
index 0000000000..2e7a92b85f
--- /dev/null
+++ b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsNoFrameworkUnitTest.java
@@ -0,0 +1,17 @@
+package com.baeldung.environmentvariablesfortest;
+
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static uk.org.webcompere.systemstubs.SystemStubs.withEnvironmentVariables;
+
+class EnvironmentVariablesSystemStubsNoFrameworkUnitTest {
+
+ @Test
+ void givenSetEnvironmentVariablesInTest_thenCanBeRead() throws Exception {
+ withEnvironmentVariables("system stubs", "in test")
+ .execute(() -> {
+ assertThat(System.getenv("system stubs")).isEqualTo("in test");
+ });
+ }
+}
diff --git a/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsTestNGUnitTest.java b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsTestNGUnitTest.java
new file mode 100644
index 0000000000..61ca76a8b0
--- /dev/null
+++ b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/environmentvariablesfortest/EnvironmentVariablesSystemStubsTestNGUnitTest.java
@@ -0,0 +1,26 @@
+package com.baeldung.environmentvariablesfortest;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Listeners;
+import org.testng.annotations.Test;
+import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
+import uk.org.webcompere.systemstubs.testng.SystemStub;
+import uk.org.webcompere.systemstubs.testng.SystemStubsListener;
+import static org.assertj.core.api.Assertions.assertThat;
+
+@Listeners(SystemStubsListener.class)
+public class EnvironmentVariablesSystemStubsTestNGUnitTest {
+ @SystemStub
+ private EnvironmentVariables setEnvironment;
+
+ @BeforeClass
+ public void beforeAll() {
+ setEnvironment.set("testng", "has environment variables");
+ }
+
+ @Test
+ public void givenEnvironmentVariableWasSet_thenItCanBeRead() {
+ assertThat(System.getenv("testng")).isEqualTo("has environment variables");
+ }
+
+}