EasyMockでvoidメソッドの振る舞いを定義する方法。
EasyMockで普通のメソッドと同じようにvoidのメソッドの振る舞いを定義しようとしたらハマったのでメモ。(いくつか情報は出たものの、意味がわかりづらかった。)
回答
- 普通のメソッドのように定義すると「
EasyMock のメソッド expect(T) は引数 (void) に適用できません
」とエラーになります。 - よって、一度振る舞いを定義したいメソッドを呼び出した後に「
expectLastCall()
」を呼ぶことでその呼出を記録することができます。 - 詳細は以下のサンプル参照。
- 比較用にvoid以外のメソッドの振る舞いも同時に定義しています。
// テスト対象クラス public class Hoge { // 返り値がString public String methodA() { return "methodA"; } // 返り値がvoid public void methodB(String str) { } } // テストクラス public static class HogeTest { @Test public void testMethod() throws Exception { Hoge hogeMock = createMock(Hoge.class); // 返り値がStringの場合。 expect(hogeMock.methodA()).andReturn("mockMethodA"); // 返り値がvoidの場合。 hogeMock.methodB("str"); // 一回処理を呼び出す。 EasyMock.expectLastCall(); // 一つ前の挙動を記録する。 replay(hogeMock); assertThat(hogeMock.methodA(), is("mockMethodA")); hogeMock.methodB("str"); // str以外の値の場合に例外。 verify(hogeMock); } }
※上記例はEasyMock Class Extensionが入っている状態での例になります。(使用しないとインターフェースのみ。)