Используйте методы Mockito для Stub в том же классе, что и тестируемый класс (CUT)

Я пытаюсь протестировать некоторые устаревшие коды с помощью 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);

}

Ответы

Ответ 1

Вы должны выполнить процедуру testRef следующим образом:

Test testRef = new Test(taskJob) {

    public void updateAndReschedule(Long id, String message) {
        //do nothing
    }

};

Нет необходимости в шпионе.

Ответ 2

По-моему, объект-шпион вместо издевки. Шпион - это макет, созданный как прокси-сервер существующего реального объекта; некоторые методы могут быть заштрихованы, в то время как ненагруженные передаются на покрытый объект

Шпион более элегантный, чем анонимная реализация выбранных методов

Посмотрите на пример:

Mockito: попытка использовать метод spy по методу вызывает оригинальный метод

хорошая статья о mockito Вы можете прочитать

http://refcardz.dzone.com/refcardz/mockito