現在業務でJMockを使ったテストを行おうとしているため、JMockの勉強中です。
最初は以下のページ
jMockを使ってみる
を参考にテストコードを書いていたのですが
拡張していくうちにエラーが出てきてしまい嵌ってしまったためその点をメモ
- 引数の比較
JMockで作ったオブジェクトの引数は同値性で比較されるため
equalsメソッドを用意する必要があるみたいです。
equalsメソッドは以下を参考に
org.apache.commons.lang.builder.EqualsBuilder
メソッドを利用しました。
jMockの簡単なまとめ - A Memorandum
-
-
- -
-
Mock作成対象のインターフェース
public interface External { String someExternal(SampleEntity entity); }
テスト実施対象のクラス
public class Sample { private External external; public void some(SampleEntity arg) { System.out.println("some start"); arg1 = "test1"; System.out.println(external.someExternal(new SampleEntity(arg1, arg2))); System.out.println("some end"); } public void setExternal(External external) { this.external = external; } }
引数のエンティティクラス
import org.apache.commons.lang.builder.EqualsBuilder; public class SampleEntity { private String arg1; private String arg2; public SampleEntity(String arg1, String arg2) { super(); this.arg1 = arg1; this.arg2 = arg2; } public String getArg1() { return arg1; } public void setArg1(String arg1) { this.arg1 = arg1; } public String getArg2() { return arg2; } public void setArg2(String arg2) { this.arg2 = arg2; } // equalsメソッドがないとテスト失敗 @Override public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj); } }
テストメソッド
// import略 @RunWith(JMock.class) public class SampleTest { private Mockery context = new JUnit4Mockery(); private External external; private Sample instance; @Before public void setUp() throws Exception { external = context.mock(External.class); instance = new Sample(); instance.setExternal(external); } @Test public void testSome() { context.checking(new Expectations() {{ SampleEntity a = new SampleEntity("test1", "i"); one(external).someExternal(a); will(returnValue("return1")); }}); instance.some("a", "i"); } }