パラメータ クラスの場合
class Criteria {
    private Map params;
    public getMap(){ return params; }
}
およびサービスメソッドはこの基準を受け入れます
class Service{
    public List<Person> query(Criteria criteria){ ... }
}
カスタム featureMatcher を使用して条件キーを照合します
private Matcher<Criteria> hasCriteria(final String key, final Matcher<?> valueMatcher){
    return new FeatureMatcher<Criteria, Object>((Matcher<? super Object>)valueMatcher, key, key){
        @Override protected Object featureValueOf(Criteria actual){
            return actual.getMap().get(key);
        }
    }
}
引数を検証するためにmockitoを使用する場合:
verify(Service).query((Criteria) argThat("id", hasCriteria("id", equalTo(new Long(12)))));
エラー メッセージは次のことを示しています。
Argument(s) are different! Wanted:
Service.query(
   id <12L>
);
-> at app.TestTarget.test_id (TestTarget.java:134)
Actual invocation has different arguments:
Service.query(
   app.Criteria@509f5011
);
私が使用する場合ArugmentCaptor、
ArgumentCaptor<Criteria> argument = ArgumentCaptor.forClass(Criteria.class);
verify(Service).query(argument.capture());
assertThat(argument.getValue(), hasCriteria("id", equalTo(new Long(12))));
メッセージははるかに優れています。
Expected: id <12L> but id was <2L>
を使用せずに、どうすればそのようなメッセージを取得できますArgumentCaptorか?