簡體   English   中英

在Spock測試中不能Mockito間諜課嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM