[英]Mockito verify a function is invoked once in my case
我正在使用Mockito編寫我的測試用例。 我有一個簡單的類,其中包含一個我想測試的功能countPerson(boolean)
:
public class School {
//School is a singleton class.
public void countPerson(boolean includeTeacher) {
if (includeTeacher) {
countIncludeTeacher();
return;
}
countOnlyStudents();
}
public void countIncludeTeacher() {...}
public void countOnlyStudents() {...}
}
在我的單元測試中,我想測試countPerson(boolean)
函數:
public class SchoolTest{
private School mSchool;
@Before
public void setUp(){
mSchool = School.getInstance();
}
@Test
public void testCountPerson() {
mSchool.countPerson(true);
//How to test/verify countIncludeTeacher() is invoked once?
}
}
在我的測試案例中,如何使用Mockito來檢查/驗證countIncludeTeacher()
一次?
您將不得不使用間諜 。 這里的問題是您要驗證是否在真實對象而非模擬對象上調用了方法。 您不能在此處使用模擬,因為它將對類中的所有方法進行存根,因此也將countPerson
默認情況下不執行任何操作。
@Test
public void testCountPerson() {
School school = School.getInstance();
School spySchool = Mockito.spy(school);
spySchool.countPerson(true);
verify(spySchool).countIncludeTeacher();
}
但是,請注意,使用間諜程序時應格外小心,因為除非經過特殊處理,否則實際方法都會被調用。 引用Mockito Javadoc:
真正的間諜應該小心謹慎地使用,例如在處理遺留代碼時。
如果只需要一個調用,則可以使用
verify(mSchool, times(1)).countIncludeTeacher();
我想檢查互動,而不在乎它發生的頻率,
verify(mSchool).countIncludeTeacher();
verify(mSchool, times(1)).countIncludeTeacher();
編輯:正如@Tunaki提到的那樣,將無法正常工作。 您應該使用間諜。
您有兩個選擇。
你需要這樣
Mockito.doNothing().when(mock).countIncludeTeacher();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.