Java JMockitを使用するサンプル

JavaのJMockitを使用するサンプルです。
確認環境 (Eclipse4.8、Java 8、jmockit-1.49、junit-4.12、hamcrest-core-1.3)

目次 JMockitとは / jmockitを取得する
今回のプロジェクトのファイル
テストするコード
jmockitでモックを作成する(テストクラス)
テスト実行時にエラーが出た場合

JMockitとは

  • JUnitでモックオブジェクトを利用するためのライブラリです。
  • モックオブジェクトを使用して返り値をコントロールできます。
  • 対象のクラスが未完成または戻り値をコントロールしたい場合に使用します。
  • 以下は、jmockitのリンクです。
    http://jmockit.github.io/
  • 実行する場合は、JUnit4の設定とテストコードの実行方法の知識が必要です。
    Java JUnit4の使い方とテストのサンプル

jmockitを取得する

Mavenで取得

pom.xmlのproject内に追加します。

<!-- https://mvnrepository.com/artifact/org.jmockit/jmockit -->
<dependency>
    <groupId>org.jmockit</groupId>
    <artifactId>jmockit</artifactId>
    <version>1.49</version>
    <scope>test</scope>
</dependency>

jarファイルで取得

jarファイルは、MavenRepositoryのサイトにあります。
https://mvnrepository.com/artifact/org.jmockit/jmockit

Versionの1.4.3をクリックして、以下の図の「Files」の横にあるjarをクリックするとjarファイルをダウンロードできます。

取得したjarファイルをクラスパスに追加します。
Eclipse jarファイルをクラスパスに設定する方法参照。

ビルドパスの読み込まれる順番は、JMockitのjarが先でその後にJUnitのjarを設定します。

今回のプロジェクトのファイル

今回のプロジェクトのファイルは以下のとおりです。

テストするコード

以下のクラスに対してテストします。

package test1;

public class Color  {
	String getName(String a) {
		// 未実装
		return null;
	}
}

jmockitでモックを作成する(テストクラス)

モックを作成します。

package test1;
import static org.junit.Assert.*;
import org.junit.Test;
import mockit.Expectations;
import mockit.Mocked;
import static org.hamcrest.CoreMatchers.*;

public class ColorTest {
	@Mocked
	private Color Color1;

	@Test
	public void test1() {
		// JMockitが返す値を設定する
		new Expectations() {
			{
				Color1.getName("色は");
				result = "色は赤です";
			}
		};
		// 対象のインスタンスを生成
		Color c1 = new Color();
		String str1 = c1.getName("色は");
		assertThat(str1, is("色は赤です")); // 成功
	}
	@Test
	public void test2() {
		new Expectations() {
			{
				Color1.getName(null);
				result = "nullです";
			}
		};
		Color c1 = new Color();
		String str1 = c1.getName(null);
		assertThat(str1, is("nullです")); // 成功
	}
}

15~19行目は、JMockitの機能でColorクラスのgetNameメソッドを実行したときに返す値を設定しています。

22,23行目は、Colorクラスのインスタンスを生成し、メソッドを実行し返り値を取得しています。

24行目は、assertThatメソッドで実際の値と期待値を比較しています。結果は成功になります。
本来であればgetNameメソッドはnullを返すはずですが、JMockitの機能で「色は赤です」が返ります。

assertThatの構文は以下のとおりです。

assertThat(実際の値,is(期待の値))

テストの結果が想定どうりの場合は、緑色の帯が表示され、失敗は0で表示されます。

テスト実行時にエラーが出た場合

java.lang.IllegalStateException: Native library for Attach API not available in this JRE
Caused by: java.lang.IllegalStateException: JMockit didn't get initialized; please check the -javaagent JVM initialization parameter was used

テストコード実行時に上記のエラーが出る場合は以下の設定を行います。

1.Eclipseの「ウィンドウ」→「設定」→「Java」→「インストール済みのJRE」をクリックし、インストール済みのJREの一覧を表示します。
2.インストール済みのJREを選択して「編集」を押してJREの編集ダイアログを開きます。
3.「デフォルトのVM引数」に「-javaagent: 」とjmockitのパスを入力して完了を押します。
例:-javaagent:D:¥jar¥jmockit-1.49.jar

関連の記事

Java JUnit4の使い方とテストのサンプル
Java assertThatメソッドのサンプル

△上に戻る