LoginSignup
5
4

More than 3 years have passed since last update.

今更ながら、mockito入門の個人的メモ

Last updated at Posted at 2019-07-22

最近android(java)のテストを書きたいと思って、モックライブラリのmockitoを勉強したのでメモ

と言っても以下の記事をざっくりまとめただけw
https://www.vogella.com/tutorials/Mockito/article.html#using-gradle-for-an-android-project

セットアップ

// build.gradeに以下を記述。
dependencies {
    // ... more entries
    testCompile 'junit:junit:4.12'

    // required if you want to use Mockito for unit tests
    testCompile 'org.mockito:mockito-core:2.7.22'
    // required if you want to use Mockito for Android tests
    androidTestCompile 'org.mockito:mockito-android:2.7.22'
}

上に青字でsyncボタンが出てくるのでタップすると、セットアップ完了。

MainActivity.javaを開き、クラスをクリックして、goto testを選択。
Android testか、unit testのフォルダを選択する必要があるので、
Unit testのフォルダを選択。

// 以下が自動生成された。
```
package com.example.mockitosandbox;

import static org.junit.Assert.*;

public class MainActivityTest {

}
```

まず、テスト対象のクラスをMainActivityと同じフォルダに作る。

public class Foo {
    public String foo() {
        return "foo";
    }
}

上記コードのFooを右クリックし、unit testをjunit4で作成する。

Footestを以下のように書き換える。
一般的なjunit4のテストだ。

import static org.mockito.Mockito.*;

public class FooTest {
    @Test
    public void testClassTest() {
        // モックを作成
        Foo foo = mock(Foo.class);

        // 返り値をモックする。
        when(foo.foo()).thenReturn("kaba");

        // testを作成。
        assertEquals(foo.foo(), "kaba");
    }

テストが成功したら、モック成功だ!

static importとは?

org.mockito.Mockito.*;をstaticにimportすることで、meck()のような、メソッドを、直接テストに使うことが出来る。static importは、staticメンバを使うことを可能にする。例えば、クラス内メソッドや、フィールドをクラスを指定せずに記述できる。
stitic importは、可読性を大きく向上させるので、おすすめです。

Mockの返り値を設定する。

一般的なモックライブラリのように、モックに任意の還り値を与えることが出来る。
以下のコードでは、モックオブジェクトに帰り値を設定している。

package com.example.mockitosandbox;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;

import java.util.Iterator;

import static org.mockito.Mockito.*;

import static org.junit.Assert.*;

public class MainActivityTest {

    @Test
    public void testMoreThanOneReturnValue() {
        Iterator<String> i= mock(Iterator.class);
        when(i.next()).thenReturn("Mockito").thenReturn("rocks");
        String result= i.next()+" "+i.next();
        //assert
        assertEquals("Mockito rocks", result);
    }
}

一番やりたいクラス内で宣言される、androidモジュールのモックのやり方が書いていない。
見つかり次第記述する。

これぐらいできたら、基本的なモックは作れそう。

個人的メモ完

5
4
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
5
4