LoginSignup
8
12

More than 5 years have passed since last update.

落ち着いて聞いてほしい、@Mockでモックを初期化する方法は3つある。

Posted at

mockitoでは、モックにしたい変数に@Mockアノテーションを付けるだけでモックを作れます。この場合、アノテーションを有効にする記述をする必要があります。アノテーションの有効化は、initMocksを呼び出す、Runnerを使う、Ruleを使うの3つの方法で行えます。

mockito

mockitoはモック作成、呼び出しの検証、スタブの作成が行えるユニットテスト用のJavaライブラリです。

以下は公式サイトにあるキャッチコピー。

Tasty mocking framework for unit tests in Java

Javaのユニットテストのための味わい深い(?)モックフレームワーク

インストール

gradleを使っている場合は、build.gradleのdependenciesにmockitoを追加してください。

build.gradle
group 'net.example'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile group: 'org.mockito', name: 'mockito-core', version: '2.21.0'
}

基本的な使い方

モックにしたクラスのメソッドにスタブを作ってテストするという使い方をよくします。

基本的な使い方

mockの作り方

mockを作る方法は、mockメソッドを使う方法と、@Mockアノテーションを使う方法があります。

上の例で使っていたので、mockメソッドを使う方法です。

private List mockedList = mock(List.class);

もう一つが@Mockアノテーションを使う方法です。

@Mock
private List mockedList;

アノテーションを使ったほうが記述が少なく、見栄えもいいのですが注意が必要です。
@Mockに限らず、mockitoが提供しているいくつかのアノテーションを使うときはアノテーションを使ったMockを初期化する処理を書かなければいけません。

アノテーションを使ったmockを初期化する方法

@Mockとかを初期化する方法は3つあります。
私はRunnerを使うのが楽なので好きです。

initMocks()を使う

@Beforeなメソッドの中でinitMocksを使います。

initMocksを使う

Runnerを使う

@RunWith(MockitoJUnitRunner.class)をクラスにつけます。
Mockito用のRunnerが適用されるので、Mockの初期化だけでなくスタブの用法が間違ってないか検証するなどの機能もあります。

Runnerを使う

Ruleを使う

JUnitのRuleを使ってMockitoJUnit用のルールを適用します。

@Rule public MockitoRule rule = MockitoJUnit.rule();

効果としてはRunWithを使った場合と変わらないようです。

Ruleをつかう

情報源

8
12
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
8
12