Измените входной параметр функции void и прочитайте его потом
У меня довольно сложная функция java, которую я хочу протестировать с помощью jUnit, и я использую Mockito для этой цели. Эта функция выглядит примерно так:
public void myFunction (Object parameter){
...
doStuff();
...
convert(input,output);
...
parameter.setInformationFrom(output);
}
Преобразование функции устанавливает атрибуты вывода в зависимости от ввода, и это функция типа void, хотя параметр "output" - это то, что используется, как если бы оно возвращалось функцией. Эта функция преобразования - это то, что я хочу макетировать, поскольку мне не нужно зависеть от ввода для теста, но я не знаю, как это сделать, поскольку я не очень хорошо знаком с Mockito.
Я видел основные случаи как when(something).thenReturn(somethingElse)
или метод doAnswer, который, как я понимаю, похож на предыдущий, но к нему может быть добавлено больше логики, но я не думаю, что эти случаи подходят для моего случая, так как моя функция не имеет оператора return.
Ответы
Ответ 1
Если вы хотите, чтобы посмеянный метод вызывал метод (или иным образом изменял) параметр, вам нужно написать ответ как в этом вопросе ( "Как издеваться над void return, влияющий на объект" ).
Из Кевин Велькер ответ:
doAnswer(new Answer() {
Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
((MyClass)args[0]).myClassSetMyField(NEW_VALUE);
return null; // void method, so return null
}
}).when(mock).someMethod();