argThat
บวกแลมบ์ดา
นั่นคือวิธีที่คุณสามารถตรวจสอบการโต้แย้งของคุณล้มเหลว:
verify(mock).mymethod(argThat(
(x)->false
));
ที่ไหน
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
argThat
บวกยืนยัน
การทดสอบดังกล่าวจะ Expected: lambda$... Was: YourClass.toSting...
"พูด" คุณสามารถได้รับสาเหตุของความล้มเหลวที่เฉพาะเจาะจงมากขึ้นหากใช้การยืนยันในแลมบ์ดา:
verify(mock).mymethod(argThat( x -> {
assertThat(x).isNotNull();
assertThat(x.description).contains("KEY");
return true;
}));
แต่: ใช้ได้เฉพาะกับ 1 วิธีเท่านั้น หากวิธีการตรวจสอบที่เรียกว่า 2+ ครั้ง mockito จะส่งผ่านชุดค่าผสมที่เรียกทั้งหมดไปยังตัวตรวจสอบแต่ละตัว ดังนั้น mockito จึงคาดว่าตัวตรวจสอบของคุณจะส่งกลับอย่างเงียบ ๆtrue
สำหรับหนึ่งในชุดอาร์กิวเมนต์และfalse
(ไม่มีข้อยกเว้นยืนยัน) สำหรับการโทรที่ถูกต้องอื่น ๆ ความคาดหวังนั้นไม่ใช่ปัญหาสำหรับการเรียกใช้เมธอด 1 วิธี แต่ควรคืนค่าจริง 1 ครั้ง
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
ตอนนี้การทดสอบบอกว่า: Expected: Obj.description to contain 'KEY'. Was: 'Actual description'
. หมายเหตุ: ฉันใช้การassertJ
ยืนยัน แต่ขึ้นอยู่กับคุณถึงกรอบการยืนยันที่จะใช้
argThat
ด้วยข้อโต้แย้งหลาย ๆ
ถ้าคุณใช้argThat
, ขัดแย้งทั้งหมดจะต้องให้กับการแข่งขัน เช่น:
verify(mock).mymethod(eq("VALUE_1"), argThat((x)->false));
// above is correct as eq() is also an argument matcher.
verify(mock).mymethod("VALUE_1", argThat((x)->false));
// above is incorrect; an exceptoin will be thrown, as the fist arg. is given without an argument matcher.
ที่อยู่:
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
eq
จับคู่
วิธีที่ง่ายที่สุดในการตรวจสอบว่าอาร์กิวเมนต์มีค่าเท่ากันหรือไม่:
verify(mock).mymethod(eq(expectedValue));
// NOTE: ^ where the parentheses must be closed.
อาร์กิวเมนต์โดยตรง
หากการเปรียบเทียบโดยการอ้างอิงเป็นที่ยอมรับก็ให้ดำเนินการดังนี้
verify(mock).mymethod(expectedArg);
// NOTE: ^ where the parentheses must be closed.
สาเหตุที่verify(mock.mymethod...
แท้จริงของความล้มเหลวของคำถามเดิมเป็นที่ที่ผิดของ paranthes: มันผิด ทางด้านขวาจะเป็น:verify(mock).*