【JUnit】 JUnit で環境変数を変更するテストを行うには...

JUnit環境変数を変更するテストを行うには...

以下の2つの方法がある
【1】System Rulesを使う
http://stefanbirkner.github.io/system-rules/
【2】PowerMockを使う

【1】System Rulesを使う

■ 設定

http://stefanbirkner.github.io/system-rules/download.html
に記載。今回は、Gradleを使う。
build.gradle
dependencies {
    // Use JUnit test framework
    testImplementation 'junit:junit:4.12'
    
    // System Rules
    testCompile 'com.github.stefanbirkner:system-rules:1.17.0'
}

■ サンプル

import static org.junit.Assert.*;

import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.EnvironmentVariables;

public class SampleTest {
  @Rule
  public final EnvironmentVariables environmentVariables = new EnvironmentVariables();

  @Test
  public void test() {
    environmentVariables.set("ENV_KEY", "dummy01");

    assertEquals("dummy01", System.getenv("ENV_KEY"));
  }
}

■ 使用上の注意

 * 環境変数を設定したら、別のテストメソッドにも反映される(以下の「サンプル」参照)
サンプル
import static org.junit.Assert.*;

import org.junit.Test;
import org.junit.contrib.java.lang.system.EnvironmentVariables;

public class SampleTest {

  @Test
  public void test1() {
    EnvironmentVariables environmentVariables = new EnvironmentVariables();
    environmentVariables.set("ENV_KEY", "dummy01");

    assertEquals("dummy01", System.getenv("ENV_KEY"));
  }

  @Test
  public void test2() {
    assertNull(System.getenv("ENV_KEY")); // ★エラー★(test1()で設定した値「dummy01」が返ってくる)
  }
}

【2】PowerMockを使う

 * 以下の関連記事の「サンプル2」を参照のこと。
https://blogs.yahoo.co.jp/dk521123/37484564.html


関連記事

JUnit】 DBにまつわる単体試験 [3] ~ AssertJ / AssertJ-DB ~

https://blogs.yahoo.co.jp/dk521123/36157721.html

PowerMock ~ 入門編 ~

https://blogs.yahoo.co.jp/dk521123/37484564.html