Lors de l'écriture de code de test dans jUnit, etc.
System.Vous souhaiterez peut-être remplacer temporairement la valeur de la variable d'environnement système que vous obtenez par getenv.
Deux implémentations, l'une qui n'utilise pas de bibliothèque et l'autre qui utilise PowerMock, sont décrites.
Dependency
Java 8
* Je pense que cela fonctionnera avec Java 7.
# Implémentation sans bibliothèque
La variable d'environnement système `` TMEP '' a été remplacée.
```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 {
//Obtenez des méthodes de classe finale et rendez-les accessibles
Class<?> clazz = Class.forName("java.lang.ProcessEnvironment");
Field theCaseInsensitiveEnvironment = clazz.getDeclaredField("theCaseInsensitiveEnvironment");
theCaseInsensitiveEnvironment.setAccessible(true);
//Remplacez uniquement les variables d'environnement système dont vous avez besoin
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 est relativement facile à mettre en œuvre. Cependant, la classe doit être annotée.
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");
}
}
L'exemple de code source est ci-dessous. https://github.com/amanoese/java-reflection-sample
Le processus était similaire dans le code source des règles système, donc, fondamentalement, c'est correct. 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