У меня проблема с Mockito, пытающейся вызвать реальный метод во время stubbing. Я предполагаю, что это может быть связано с тем, что метод наследуется. Это компонент, внешний по отношению к моей системе, и он не может сделать очень много об этом. Но давайте перейдем к кодуMockito называет реальный метод от суперкласса при stubbing
AbstractRpcClient abstractRpcClient = mock(AbstractRpcClient.class);
doNothing().when(abstractRpcClient).callOnce(anyString(), anyVararg());
Так как callOnce
методов звонков на некоторых других объектах, которые я получаю NPE прямо во второй строке. AbstractRpcClient
наследуется от другого абстрактного класса, но этот класс является локальным, поэтому я даже не могу его отбросить.
Есть ли что-нибудь, что я могу сделать с этим? Как я могу заглушить этот метод, чтобы ничего не делать или исключать исключение БЕЗ вызова реального метода.
Должен ли я расширять этот класс методом проверки и переопределения callOnce
? Это, конечно, работает, но есть ли другое решение?
Минимальный пример:
package external.component;
public abstract class ClassToMock extends SuperClass {
}
abstract class SuperClass {
public void callOnce(String method, Object... params) {
throw new RuntimeException("We shouldn't be here");
}
}
Тест класс
package mypackage
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.anyVararg;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
public class Testclass {
@Test
public void test() {
external.component.ClassToMock classToMock = mock(external.component.ClassToMock.class);
doNothing().when(classToMock).callOnce(anyString(), anyVararg());
}
}
В примере, конечно RuntimeException
выбрасывается из callOnce
метода.
Пожалуйста, пост [mcve]. Метод не следует здесь вызывать. – Tunaki
Я рекомендую вам взглянуть на эту тему, обсуждая ту же проблему: http://stackoverflow.com/questions/3467801/mockito-how-to-mock-only-the-call-of-a-method-of-the -superclass –
Проблема может быть связана с тем, что 'external.component.ClassToMock' является абстрактным –