簡體   English   中英

重置Mockito間諜

[英]Resetting Mockito Spy

我有一個測試類(基於TestNG),我使用Mockito.verify作為間諜對象。

這有效:

public class Program {
    @Spy
    private TestObject testObject;

    @Test
    public void test1() {
       testObject.makeSth(); 
       verify(testObject, only()).someMethodNeedToBeChecked(); 
    }
}

但在這里:

public class Program {
    @Spy
    private TestObject testObject;

    @Test
    public void test1() {
       testObject.makeSth(); 
       verify(testObject, only()).someMethodNeedToBeChecked(); 
    }

    @Test
    public void test2() {
        // Some different scenario
       testObject.makeSth(); 
       verify(testObject, only()).someMethodNeedToBeChecked(); 
        ...
    }
}

我得到一個Mokito異常,我有更多的someMethodNeedToBeChecked方法的調用。 當然我試圖添加Mockito.reset(testObject)但它根本沒有幫助我。

如果我需要在多個測試中驗證相同的方法,如何重置間諜對象?

從Mockito 文檔

重置模擬(自1.8.0開始)

Smart Mockito用戶幾乎不使用此功能,因為他們知道這可能是測試不佳的標志。 通常,您不需要重置模擬,只需為每個測試方法創建新的模擬。 請考慮在冗長,過度指定的測試中編寫簡單,小巧且集中的測試方法,而不是reset()。 在測試方法的中間,第一個潛在的代碼氣味被重置()。 這可能意味着你的測試太多了。 按照你的測試方法的低語:“請保持我們小,專注於單一行為”。 在mockito郵件列表上有幾個關於它的主題。

我們添加reset()方法的唯一原因是可以使用容器注入的模擬。

您應該只是在@BeforeMethod重新創建間諜:

public class Program {

    private TestObject testObject = new TestObject();
    private TestObject spyTestObject;

    @BeforeMethod
    public void buildSpy() {
        spyTestObject = spy(testObject);
    }

    @Test
    public void test1() {
       spyTestObject.makeSth(); 
       verify(spyTestObject , only()).someMethodNeedToBeChecked(); 
    }

    @Test
    public void test2() {
        // Some different scenario
       spyTestObject.makeSth(); 
       verify(spyTestObject , only()).someMethodNeedToBeChecked(); 
        ...
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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