コンテナ型の内部にラッパー型が入っている時にmockitoのverifyメソッドのエラー表示がわかりにくいのをなおした
たとえば以下のケース。Map の中に long が入っていることを検証しているのですが、実際にはいっているのは Integer。
@Test
public void foo() {
Foo m = mock(Foo.class);
m.foo(new HashMap<String, Object>(){{
put("hoge", 4);
}});
verify(m).foo(new HashMap<String, Object>(){{
put("hoge", 4L);
}});
}
public static class Foo {
void foo(Map<String, Object> map) {
}
}
この場合、以下のような表示となり、「違わないやんけ!!」となり血管が破裂しそうになります(なりません)。
Argument(s) are different! Wanted:
foo.foo(() {hoge=4});
-> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Actual invocation has different arguments:
foo.foo(() {hoge=4});
-> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
これが以下のように L suffix がついていれば問題点が歴然となり、血管に優しいのではないか、と考えました。
Argument(s) are different! Wanted:
foo.foo({"hoge"=4L});
-> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Actual invocation has different arguments:
foo.foo({"hoge"=4});
-> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
https://github.com/mockito/mockito/pull/571#issuecomment-241416329 そういうわけで、p-r を送ったところ、取り込まれましたので mockito 2.0 では問題点が修正されることかと思います(いつでるんや〜)