[英]Cannot Mockito spy class in Spock test?
我正試圖在Spock測試中窺探Java類。 我以前在Spock / Groovy中沒有遇到Mockito的問題。
當我嘗試執行以下操作時:
def service = spy(Service.class)
我收到以下錯誤:
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class java.lang.Class
Mockito cannot mock/spy following:
- final classes
- anonymous classes
- primitive types
當我做mock(Service.class)
,它工作正常。
我已經確認該課程不是最終的,匿名的或原始的。
有任何想法嗎? 我在課堂上有一個隨機生成器(ak)所以我需要間諜不要嘲笑。
謝謝
Mockito不會監視Classes(或Mocks),它會監視(常規)對象。 因此,而不是
def service = spy(Service.class)
你必須寫
def service = spy(new Service())
(或適用於您的場景的任何構造函數)。
對Ray的答案來說,你也可以窺探已經創建的實例。 唯一的問題是,在調用spy()
之前調用的所有方法都無法驗證。 喜歡:
ClassToSpy spiedInstance;
@Before
public void before () {
spiedInstance = new ClassToSpy();
}
@Test
public void testWillFail() {
spiedInstance.method();
spiedInstance = spy(spiedInstance);
verify(spiedInstance).method();
}
@Test
public void testWillPass() {
spiedInstance = spy(spiedInstance);
spiedInstance.method();
verify(spiedInstance).method();
}
您從testWillFail
獲得的錯誤類似於:
Wanted but not invoked:
classToSpy.method();
-> at your.package.testWillFail(TestClass.java:line)
Actually, there were zero interactions with this mock.
由於事實上,在發現后,你沒有調用這種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.