Beim Schreiben von Testcode in jUnit etc.
System.Möglicherweise möchten Sie den Wert der Systemumgebungsvariablen, die Sie erhalten, vorübergehend durch getenv ersetzen.
Es werden zwei Implementierungen beschrieben, von denen eine keine Bibliothek und die andere PowerMock verwendet.
Dependency
Java 8
* Ich denke, es wird mit Java 7 funktionieren.
# Implementierung ohne Bibliothek
Die Systemumgebungsvariable `` `TMEP``` wurde ersetzt.
```java
import org.junit.Test;
import java.lang.reflect.Modifier;
import java.lang.reflect.Field;
import java.util.Map;
import static org.junit.Assert.assertEquals;
public class EnvironmentTest {
@Test
public void replaceEnvironment() throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
//Holen Sie sich Final Class-Methoden und machen Sie sie zugänglich
Class<?> clazz = Class.forName("java.lang.ProcessEnvironment");
Field theCaseInsensitiveEnvironment = clazz.getDeclaredField("theCaseInsensitiveEnvironment");
theCaseInsensitiveEnvironment.setAccessible(true);
//Ersetzen Sie nur die Systemumgebungsvariablen, die Sie benötigen
Map<String,String> sytemEnviroment = (Map<String, String>) theCaseInsensitiveEnvironment.get(null);
sytemEnviroment.put("TEMP","/MY_TEMP_DIR");
assertEquals(System.getenv("TEMP"),"/MY_TEMP_DIR");
}
}
PowerMock
PowerMock ist relativ einfach zu implementieren. Die Klasse muss jedoch mit Anmerkungen versehen werden.
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.junit.Assert.assertEquals;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ System.class })
public class EnvironmentWithPowerMockTest {
@Test
public void replaceEnvironment(){
PowerMockito.mockStatic(System.class);
PowerMockito.when(System.getenv("TEMP")).thenReturn("/MY_TEMP_DIR");
assertEquals(System.getenv("TEMP"),"/MY_TEMP_DIR");
}
}
Der Beispielquellcode ist unten. https://github.com/amanoese/java-reflection-sample
Der Prozess war im Quellcode der Systemregeln ähnlich, daher ist dies im Grunde genommen in Ordnung. https://github.com/stefanbirkner/system-rules/blob/master/src/main/java/org/junit/contrib/java/lang/system/EnvironmentVariables.java#L165-L190
https://qiita.com/5at00001040/items/83bd7ea85d0f545ae7c3 https://blogs.yahoo.co.jp/dk521123/37484564.html https://stackoverflow.com/questions/318239/how-do-i-set-environment-variables-from-java
Recommended Posts