Ответ 1
Вы должны выполнить процедуру testRef следующим образом:
Test testRef = new Test(taskJob) {
public void updateAndReschedule(Long id, String message) {
//do nothing
}
};
Нет необходимости в шпионе.
Я пытаюсь протестировать некоторые устаревшие коды с помощью Mockito, и метод является типом void.
Я пропустил много вызовов методам в других классах, это прекрасно работает. Тем не менее, мне также нужно уметь вызывать определенные вызовы другим методам внутри одного класса.
В настоящее время это не работает.
например. Мой класс выглядит следующим образом:
public class Test {
public Test(dummy dummy) {
}
public void checkTask(Task task, List <String> dependencyOnLastSuccessList) throws TaskException {
callToOtherClass.method1 // This works fine, I can stub it using mockito
updateAndReschedule(Long id, String message) // call to method in same class, I cannot stub it
}
public void updateAndReschedule(Long id, String message) {
//method logic.....
}
}
Это мой testClass, показывающий, что у меня есть в минуту:
@Test
public void testMyMethod() {
Test testRef = new Test(taskJob);
Test spy = spy (testRef);
// when a particular method is called, return a specific object
when(callToOtherClass.method1).thenReturn(ObjectABC);
//doNothing when my local method is called
doNothing().when(spy).updateAndReschedule(1, "test");
//make method call
spy.checkTask(ts, taskDependencies);
}
Вы должны выполнить процедуру testRef следующим образом:
Test testRef = new Test(taskJob) {
public void updateAndReschedule(Long id, String message) {
//do nothing
}
};
Нет необходимости в шпионе.
По-моему, объект-шпион вместо издевки. Шпион - это макет, созданный как прокси-сервер существующего реального объекта; некоторые методы могут быть заштрихованы, в то время как ненагруженные передаются на покрытый объект
Шпион более элегантный, чем анонимная реализация выбранных методов
Посмотрите на пример:
Mockito: попытка использовать метод spy по методу вызывает оригинальный метод
хорошая статья о mockito Вы можете прочитать