วิธีที่จำเป็นคือMockito # ตรวจสอบ :
public static <T> T verify(T mock,
VerificationMode mode)
mock
เป็นวัตถุจำลองของคุณและmode
เป็นสิ่งVerificationMode
ที่อธิบายว่าควรตรวจสอบการจำลองอย่างไร โหมดที่เป็นไปได้คือ :
verify(mock, times(5)).someMethod("was called five times");
verify(mock, never()).someMethod("was never called");
verify(mock, atLeastOnce()).someMethod("was called at least once");
verify(mock, atLeast(2)).someMethod("was called at least twice");
verify(mock, atMost(3)).someMethod("was called at most 3 times");
verify(mock, atLeast(0)).someMethod("was called any number of times");
verify(mock, only()).someMethod("no other method has been called on the mock");
คุณจะต้องมีการนำเข้าแบบคงที่เหล่านี้จากMockito
คลาสเพื่อใช้verify
วิธีการและโหมดการตรวจสอบเหล่านี้:
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.only;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
ดังนั้นในกรณีของคุณไวยากรณ์ที่ถูกต้องจะเป็น:
Mockito.verify(mock, times(4)).send()
สิ่งนี้จะตรวจสอบว่ามีการsend
เรียกเมธอด4ครั้งบนวัตถุจำลอง มันจะล้มเหลวหากถูกเรียกน้อยกว่าหรือมากกว่า 4 ครั้ง
หากคุณต้องการตรวจสอบว่าเมธอดถูกเรียกเพียงครั้งเดียวคุณไม่จำเป็นต้องผ่านไฟล์VerificationMode
. ง่าย
verify(mock).someMethod("was called once");
ก็จะเพียงพอ verify(mock, times(1)).someMethod("was called once");
มันใช้ภายใน
เป็นไปได้ที่จะมีการเรียกตรวจสอบหลายครั้งในการจำลองเดียวกันเพื่อให้เกิดการยืนยัน "ระหว่าง" Mockito ไม่สนับสนุนเรื่องแบบนี้verify(mock, between(4,6)).someMethod("was called between 4 and 6 times");
แต่เราเขียนได้
verify(mock, atLeast(4)).someMethod("was called at least four times ...");
verify(mock, atMost(6)).someMethod("... and not more than six times");
แทนเพื่อให้ได้พฤติกรรมเดียวกัน ขอบเขตจะรวมอยู่ด้วยดังนั้นกรณีทดสอบจึงเป็นสีเขียวเมื่อมีการเรียกเมธอด 4, 5 หรือ 6 ครั้ง
Mockito.verify(mock, times(4)).send()
. ฉันสงสัยว่าทำไมคุณถึง "ย้าย"send()
การเรียกเมธอดภายในverify
เมธอด คุณมีไวยากรณ์ที่ถูกต้องแล้ว