Можно ли генерировать исключение всякий раз, когда mock вызывается с неопределенными аргументами? Существует Answers.RETURNS_SMART_NULLS
, но это не совсем то, что мне нужно, так как оно не работает, если null
- это законное возвращаемое значение, которое не приводит к NullPointerException
, а скорее к ошибкам позже.
Изменить: некоторый фон. Итак, в Mockito, когда вы определяете макет, вы указываете возвращаемые значения для каждого вызова следующим образом:
when(myMock.someMethod(arg1, arg2)).thenReturn(returnValue);
Когда myMock.someMethod
вызывается с аргументами, для которых я не дал возвращаемого значения в тесте, он просто возвращает null
. Я хотел бы настроить его для сбоя сразу и сказать мне, что я забыл определить возвращаемое значение для некоторой комбинации параметров.
Изменить 2: Были предложения по предоставлению пользовательского defaultAnswer
, который выдавал бы исключения при вызове. К сожалению, это не работает. Метод ответов по умолчанию answer()
вызывается, даже если присутствует макет. Здесь образец:
public class Test {
public static class Adder {
public int add(int a, int b) {
return a + b;
}
}
public static final Answer<Object> THROW_ON_UNDEFINED_ARGS = new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
throw new IllegalArgumentException(
String.format("Calling a mock with undefined arguments: %s %s",
invocation.getMethod(),
Arrays.toString(invocation.getArguments())));
}
};
public static void main(String[] args) {
Adder adderMock = mock(Adder.class, THROW_ON_UNDEFINED_ARGS);
when(adderMock.add(2, 3)).thenReturn(5);
System.out.println(adderMock.add(2, 3));
}
}
Исключение выбрано, даже если adderMock.add(2, 3)
определен.