Я сталкиваюсь с проблемой дженериков с Mockito и Hamcrest.
Предположите следующий интерфейс:
public interface Service {
void perform(Collection<String> elements);
}
И следующий фрагмент теста:
Service service = mock(Service.class);
// ... perform business logic
verify(service).perform(Matchers.argThat(contains("a", "b")));
Итак, я хочу проверить, что моя бизнес-логика на самом деле называется службой с коллекцией, которая содержит "a" и "b" в этом порядке.
Однако возвращаемый тип contains(...)
равен Matcher<Iterable<? extends E>>
, поэтому Matchers.argThat(...)
возвращает Iterable<String>
в моем случае, что естественно не относится к требуемому Collection<String>
.
Я знаю, что я мог бы использовать аргумент-аргумент, предложенный в Hamcrest hasItem и Mockito, чтобы проверить несогласованность, но я бы очень хотел этого не делать.
Любые предложения! Спасибо!