3
votes

comment définir les variables d'environnement dans junit 5 pour le cas de test

je travaille sur Junit5. Mon code java utilise le System.getenv ("demoVar") pour accéder à la variable d'environnement. Alors, comment configurer cette variable d'environnement dans la classe de test jUnit5, afin que mon code puisse accéder à la valeur de cette variable d'environnement pendant le test.


3 commentaires

Pourquoi a-t-il été marqué comme dupliqué? La réponse à la question en double concerne les propriétés système Java. Celui-ci concerne les variables d'environnement. System.getenv est complètement différent de System.getProperty. Essayez d'utiliser System.setEnv ("", "") !! :) Donc, cette réponse n'est pas valable pour cette question. La bonne réponse devrait être une alternative aux règles système dans JUnit5


ce n'est clairement pas un doublon comme mentionné par @angelcervera


Avec Java 8, vous pouvez modifier votre méthode qui appelle System.getenv () afin qu'elle utilise à la place une Function <String, String>. Dans votre code de production, vous utiliseriez System :: getenv, et dans votre code de test, vous pouvez utiliser Map :: get sur une carte interne que vous avez remplie avec des valeurs de test.


3 Réponses :


0
votes

La pratique courante consiste à utiliser les propriétés système au lieu des variables d'environnement. Dans ce cas, vous exécuterez votre commande java / maven / gradle ou tout ce que vous utiliserez pour exécuter vos tests avec l'option -D demoVar = "{votre_valeur}". pour objectif maven:

$env:demoVar = 'test'; mvn clean install

pour java jar:

demoVar="test" mvn clean install

Vous pourrez l'obtenir à partir du code avec System.getProperty("demoVar") .

Si vous avez vraiment besoin d'utiliser la variable d'environnement, utilisez la fonctionnalité du système d'exploitation. Pour Linux:

 java -jar xxx.jar -DdemoVar="test"

Pour Windows PowerShell:

 maven clean install -DdemoVar="test"


0 commentaires

2
votes

Vous ne pouvez pas dans le processus Java réel, car ces valeurs environnementales utilisant getenv sont immuables .

Une façon serait de démarrer une autre VM ou un autre processus où vous pourriez introduire votre nouvelle valeur d'environnement.

Une autre façon serait de basculer vers System.getProperty , mais assurez-vous de bien comprendre les différences.

https://www.baeldung.com/java-system-get-property-vs-system-getenv

Voici un petit testcode:

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"));
    }

}


1 commentaires

Il existe un hack qui vous permet de définir des variables d'environnement pour le processus actuel à partir du code Java. Ce n'est pas joli et vous ne devriez pas l'utiliser à moins d'en avoir vraiment besoin. D'un autre côté, Java devrait vraiment avoir une méthode appropriée pour le faire sans recourir à des hacks.



0
votes

Cela peut être réalisé avec https://github.com/webcompere/system-stubs/tree/master/system-stubs-jupiter

@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
    }
}


0 commentaires