JMockito あるメソッドが任意の値を返す(Java モック)
これの JMockito 版です。
blueskyarea.hatenablog.com
Mockito 版の記事と同じクラスをテスト対象にしました。
テストコード(JUnit)
import mockit.Expectations; import mockit.Mocked; import mockit.integration.junit4.JMockit; @RunWith(JMockit.class) public class MemberTest { // Without mock @Test public void testGetMemberInfoWithoutMock() { Member member = new Member(1, "hoge"); assertThat(member.getPointCard().getPoint(), is(1000L)); } // With Mock @Test public void testGetMemberInfoWithMock(@Mocked Member member) { PointCard pointCard = new PointCard(1, "hoge", 2000L); new Expectations() { { member.getPointCard(); result = pointCard; } }; assertThat(member.getPointCard(), is(pointCard)); assertThat(pointCard.getPoint(), is(2000L)); } }
@RunWith(JMockit.class) アノテーションを付けないと、エラーで怒られました。
java.lang.IllegalStateException: JMockit wasn't properly initialized; check that jmockit.jar precedes junit.jar in the classpath (if using JUnit; if not, check the documentation)
classpath 内において、jmockit.jar を junit.jar よりも先に定義しておく必要があるみたいです。
自分の環境下で上手く出来なかったため、代わりにこのアノテーションで回避してます。
結果
Mockito と同様のモックを生成することが出来ました。
Mockito では期待する動作を when().thenReturn() で定義していましたが、JMockito では Expectations で定義します。
この程度の内容であれば Mockito とどちらが使いやすいか検討するまでの違いは見当たりません。
Mockito と JMockito 名前は非常に似ていますが、モックの書き方は全く異なるので、プロジェクト単位でどちらかを使うかは決めた方が良さそうです。
「モックの作り方」についてネットの検索結果をそのまま適用していると、いつの間にか混在しているみたいなこともありそうです。