AndroidStudio + PowerMock でstaticメソッドをmockする
転載元: Yukiの枝折 - Android : AndroidStudio + PowerMock でstaticメソッドをmockする
確認環境
- Android Studio 1.1
- Android Gradle Plugin 1.1
- JUnit 4.12
- PowerMock 1.6.2
はじめに
Android Studio 1.1(android gradle plugin 1.1)からUnitTestがサポートされた.
今回はPowerMockを使ってstatic methodをモックするUnitTestを書いた.
Android StudioでUnitTestを開始するには下記を参考.
UnitTestの準備が整ったならモジュールのbuild.gradleに下記の依存ライブラリを記述する.
// UnitTestにはtestCompileキーワードを使用
testCompile 'junit:junit:4.12'
// PowerMockのライブラリを指定
testCompile 'org.powermock:powermock-module-junit4:1.6.2'
testCompile 'org.powermock:powermock-api-mockito:1.6.2'
次はoptionだが, Android StudioのUnitTestは実行時にandroid.jarのモックとなるmockable-android*.jar
を作成する.
ここで定義されるメソッドスタブはすべてRuntimeExceptionをスローするように実装される.
これをExceptionではなくDefault value(false etc.)を返却するように変更するには下記を指定する.
testOptions {
unitTests.returnDefaultValues = true
}
あとはいつもの方法でPowerMockを使えばOK.
- TestRunnerにPowerMockRunnerを指定
@RunWith(PowerMockRunner.class)
public class MyTestCase extends TestCase {
- TestCaseを継承したクラスにアノテーションを追加
@RunWith(PowerMockRunner.class)
@PrepareForTest(Static.class) // Staticメソッドをモックするクラスを指定(,で複数指定可)
public class MyTestCase extends TestCase {
-
PowerMockito.mockStatic()
でモックするクラスを指定 -
Mockito.when()
でモックするメソッドとその振る舞いを指定.
PowerMockito.mockStatic(StaticHogeClass.class);
Mockito.when(StaticHogeClass.apply()).thenThrow(new Throwable("Hello PowerMock"));
以上.