Skip to main content

Command Palette

Search for a command to run...

Configure Environment Variables in JUnit Tests

Updated
1 min read
A

I am a Software Developer, mainly involved in Software Development of JAVA-enabled web applications.

In this article, we'll write a JUnit Test configured with Environment Variables using junit-pioneer library.

First of all, we need to add the junit-pioneer library and maven-surefire-plugin to the Maven pom.xml.

<project>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>
    <build>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.5.3</version>
                <configuration>
                    <includes>
                        <include>**/*Test</include>
                    </includes>
                    <failIfNoTests>true</failIfNoTests>
                    <useFile>false</useFile>
                    <!--
                        Make it able to modify environment variables for tests.
                        Ref:  https://junit-pioneer.org/docs/environment-variables/#warnings-for-reflective-access
                    -->
                    <argLine>
                        --add-opens java.base/java.util=ALL-UNNAMED
                        --add-opens java.base/java.lang=ALL-UNNAMED
                    </argLine>
                </configuration>
            </plugin>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.11.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit-pioneer</groupId>
            <artifactId>junit-pioneer</artifactId>
            <version>2.3.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

Then, we can write unit test configured with environment variables.

  @Test
  @SetEnvironmentVariable(key = "CI_ENVIRONMENT_NAME", value = "test-dev")
  @SetEnvironmentVariable(key = "AWS_ACCOUNT_ID", value = "some-account-id")
  @SetEnvironmentVariable(key = "VPC_ID", value = "some-vpc-id")
  @SetEnvironmentVariable(key = "VPC_NAME", value = "some-vpc-name")
  void testAppWithEnvSet() {
    assertDoesNotThrow(() -> AwsApiGwCdkApp.main(null));
  }

  @Test
  void testAppWithoutEnvSet() {
    assertThrows(IllegalArgumentException.class, () -> AwsApiGwCdkApp.main(null));
  }

Reference GitLab repo: https://gitlab.com/ada-public-projects/aws/aws-api-gateway-using-cdk

147 views

More from this blog

A

Ada's Programming Notebook

22 posts

I am a software developer based in Manchester, United Kingdom. Recently, I'm interested in Cloud Computing. I study writing Java SpringBoot and Node.js applications in AWS and Google Cloud.