■ 設定
* Gradleを使う
build.gradle
dependencies {
// PowerMock
testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '1.7.3'
testCompile group: 'org.powermock', name: 'powermock-api-mockito2', version: '1.7.3'
}
■ サンプル1:Calendar.getInstance()のモック化
* Calendar.getInstance()をモック化する
DateUtil.java
テスト対象 import java.util.Calendar;
import java.util.Date;
public class DateUtil {
public static Date getCurrentDate() {
// 内部で、Calendar.getInstance()を呼んでいる
Calendar calendar = Calendar.getInstance();
return calendar.getTime();
}
}
DateUtilTest.java
テストコード import static org.junit.Assert.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
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;
@RunWith(PowerMockRunner.class) // ★重要★
@PrepareForTest({Calendar.class, DateUtil.class}) // ★重要★
public class DateUtilTest {
@Test
public void getCurrentDateTest() {
Calendar mockCalendar = Calendar.getInstance();
mockCalendar.set(2018, 1, 9, 22, 20, 9);
mockCalendar.set(Calendar.MILLISECOND, 0);
PowerMockito.mockStatic(Calendar.class);
PowerMockito.when(Calendar.getInstance()).thenReturn(mockCalendar);
Date result = DateUtil.getCurrentDate();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
System.out.println("Date : " + simpleDateFormat.format(result));
assertEquals("2018/02/09 22:20:09", simpleDateFormat.format(result));
}
}
■ サンプル2:System.getenv()のモック化
* 環境変数の取得 System.getenv()をモック化する
* 以下の関連記事「JUnit で環境変数を変更するテストを行うには...」で行ったことを
PowerMock を使って行う
https://blogs.yahoo.co.jp/dk521123/37474828.htmlSampleTest.java
テストコード import static org.junit.Assert.*;
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;
@RunWith(PowerMockRunner.class) // ★重要★
@PrepareForTest({System.class}) // ★重要★
public class SampleTest {
@Test
public void test() {
PowerMockito.mockStatic(System.class);
PowerMockito.when(System.getenv("ENV_KEY")).thenReturn("dummy01");
assertEquals("dummy01", System.getenv("ENV_KEY"));
}
}