В Hamcrest также есть FeatureMatcher
, который отлично подходит для создания сопоставителей для вложенных «функций» объектов. Итак, в вашем примере вы можете структурировать его, используя FeatureMatcher
следующим образом (это шаблон, которому я склонен следовать при создании сопоставлений для вложенных полей):
public final class MyExceptionMatchers {
public static Matcher<MyException> withNthat(Matcher<Integer> nMatcher) {
return new FeatureMatcher<MyException, Integer>(nMatcher, "n", "n") {
@Override
protected Integer featureValueOf(MyException actual) {
return actual.n;
}
}
}
}
И в вашем тесте:
import static x.y.z.MyExceptionMatchers.withNthat;
import static org.hamcrest.Matchers.greaterThan;
...
thrown.expect(withNThat(greaterThan(1)));
С этим макетом очень просто добавить больше совпадений для MyException
, и это похоже на более "канонический" подход к созданию составных сопоставлений, которые позволяют вам создать точное совпадение, которое вы хотите для своего тестового примера.