33
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AndroidStudio + PowerMock でstaticメソッドをmockする

Posted at

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

以上.

33
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?