EasyMock2 の eq について
ちょっとはまったのでメモ。
EasyMock2 では、モックメソッドの呼び出し時に期待している引数が渡されているかどうかをチェックできます。
このとき、引数としてとりうる値を、'EasyMock.and()' や 'EasyMock.or()' 等等を使用して細かく指定することが出来ます。
これらの and や or とともに使うものに eq (オブジェクトを equals で比較する) があるのですが、引数が二つ以上のメソッドに対して、単純に eq を使用すると NullPointerException が発生します。
import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.eq; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; : (省略) : public void testXXXX() throws Exception { IFoo foo = createMock(IFoo.class); expect(foo.func(eq(Integer.valueOf(1)), eq(Integer.valueOf(2)))).andReturn(3).once();// この行で NullPointerException が発生 replay(foo); foo.func(Integer.valueOf(1), Integer.valueOf(2)); verify(foo); }
詳しい原因はわからないのですが、eq は and や or 等のメソッドとともに使用するのが前提になっているのではないかと思います。
なので、単純に equals での比較を行ないたいだけであれば、eq の記述を省略すればよいようです。
引数のチェックは、デフォルトで equals を使用したチェックを行なうので、期待した動作となります。
expect(foo.func(Integer.valueOf(1), Integer.valueOf(2)).andReturn(3).once();// eq を書かなければ NullPointerException は発生しない