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