스텁하는 동안 실제 메소드 호출하려고하는 모토로토에 문제가 있습니다. 나는이 메소드가 상속된다는 것과 관련이 있다고 가정한다. 이것은 내 시스템 외부의 구성 요소이며 실제로 그렇게 할 수 없습니다. 그러나의 코드에 내가 바로 두 번째 줄에 NPE를 얻을 다른 개체에 대한스텁 때 슈퍼 클래스에서 실제 메소드 호출 Mockito
AbstractRpcClient abstractRpcClient = mock(AbstractRpcClient.class);
doNothing().when(abstractRpcClient).callOnce(anyString(), anyVararg());
callOnce
이후 통화 방법을 얻을 수 있습니다. AbstractRpcClient
은 다른 추상 클래스를 상속하지만이 클래스는 패키지 로컬이므로 내 스텁에 캐스팅 할 수도 없습니다.
내가 할 수있는 일이 있습니까? 어떻게하면이 메소드를 스텁하여 아무 것도하지 않거나 실제 메소드를 호출하지 않고 예외를 던질 수 있습니다.
테스트에서이 클래스를 확장하고 메서드 callOnce
을 재정의해야합니까? 이것은 물론 작동하지만 다른 해결책이 있습니까?
최소 예 : 코스 RuntimeException
의 예에서는
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());
}
}
가 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");
}
}
테스트 클래스.
에
public void callOnce() { super.callOnce(); }
를 추가합니다. 메서드는 여기서 호출하면 안됩니다. – Tunaki같은 문제를 논의하는이 스레드를 살펴 보는 것이 좋습니다. http://stackoverflow.com/questions/3467801/mockito-how-to-mock-only-the-call-of-a-method-of-the -superclass –
'external.component.ClassToMock'이 추상적 인 –