問題描述
我正在使用 Mockito 1.9.0.我想在 JUnit 測試中模擬一個類的單個方法的行為,所以我有
I'm using Mockito 1.9.0. I want mock the behaviour for a single method of a class in a JUnit test, so I have
final MyClass myClassSpy = Mockito.spy(myInstance);
Mockito.when(myClassSpy.method1()).thenReturn(myResults);
問題是,在第二行中,myClassSpy.method1()
實際上被調用,導致異常.我使用模擬的唯一原因是以后,每當調用 myClassSpy.method1()
時,不會調用真正的方法,而 myResults
對象將是回.
The problem is, in the second line, myClassSpy.method1()
is actually getting called, resulting in an exception. The only reason I'm using mocks is so that later, whenever myClassSpy.method1()
is called, the real method won't be called and the myResults
object will be returned.
MyClass
是一個接口,而 myInstance
是一個實現,如果這很重要的話.
MyClass
is an interface and myInstance
is an implementation of that, if that matters.
我需要做些什么來糾正這種間諜行為?
What do I need to do to correct this spying behaviour?
推薦答案
讓我引用 官方文檔:
有時不可能使用 when(Object) 來存根間諜.示例:
Important gotcha on spying real objects!
Sometimes it's impossible to use when(Object) for stubbing spies. Example:
List list = new LinkedList();
List spy = spy(list);
// Impossible: real method is called so spy.get(0) throws IndexOutOfBoundsException (the list is yet empty)
when(spy.get(0)).thenReturn("foo");
// You have to use doReturn() for stubbing
doReturn("foo").when(spy).get(0);
在你的情況下,它是這樣的:
In your case it goes something like:
doReturn(resultsIWant).when(myClassSpy).method1();
這篇關于Mockito:試圖監視方法正在調用原始方法的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!