Предположим, у меня есть аннотация проверки на мой метод интерфейса для проверки входных аргументов и возвращаемого значения. Возможно ли на данный момент (V 1.9.5) сказать Mockito, чтобы вызвать этот валидатор во время процесса вызова?Можно ли использовать перехватчик для всех ответов при использовании Mockito?
Фон будет препятствовать разработчикам писать нереалистичные тесты, издеваясь над этим интерфейсом таким образом, который нарушает указанный валидатор.
Так что я хотел бы, чтобы зарегистрировать что-то вроде
class MyAnswerInterceptor<T> implements AnswerInterceptor<T> {
@Override
public Answer<T> intercept(final Answer<T> answer) {
return new Answer<T>() {
@Override
public T answer(InvocationOnMock invocation) throws Throwable {
validateArguments(invocation);
T result = answer.answer(invocation);
validateReturnValue(result);
return result;
}
}
}
}
называться по каждому ответу данного издеваться. Возможно ли это вообще? Я просмотрел код, также, чтобы проверить, могу ли я в какой-то момент взломать (даже используя отражение или что-то подобное), но, похоже, из-за запутанности создания экземпляра и логики едва ли можно достичь того, что я хочу (т. такие вещи, как MockHandler mockHandler = new MockHandlerFactory().create(settings);
делает невозможным зацепить и положить вещи на заказ сверху без исправлений и развернув все это ...)
Любое понимание будет высоко оценен :-)
Нашел одно решение, которое работает, а именно написать мой метод 'when (T methodCall)', внутри которого я делегирую 'Mockito.when', а затем завершаю OngoingStubbing в прокси-сервер Javassist и улавливаю все' thenBlubb (..) 'методы, переносящие соответствующий ответ в мой перехватчик и возвращающий прокси-сервер OngoingStubbing. Во всяком случае, это, конечно, не самый аккуратный способ, поэтому, если кто-то знает более красивый способ, я все еще открыт для предложений ;-) (в частности, он сосет обрабатывать все методы 'thenBlubb (..)', и он потребует дальнейшего внимание на каждое обновление ...) – pete83
Кроме того, ваше решение не будет работать для таких методов, как методы void, где вам нужен синтаксис doXxx/when вместо синтаксиса when/thenXxx. Если вы не создадите собственные версии каждого из методов doXxx. –
Привет! Вы хотите смешивать в простые модульные тесты какую-то очень сложную логику. Почему бы просто не протестировать сам валидатор отдельно от логики того, где он используется, и протестировать его вообще в тесте интеграции? –