มีคำตอบที่ดีมากมายที่นี่! ไปพร้อมกับชุดคุณสมบัติ Moq นอกกรอบจนกว่าคุณจะต้องยืนยันเกี่ยวกับพารามิเตอร์คลาสต่างๆที่ส่งไปยังการอ้างอิงของคุณ หากคุณอยู่ในสถานการณ์เช่นนั้นคุณสมบัติ Moq Verify กับ It.Is matchers ทำงานได้ไม่ดีในการแยกความล้มเหลวในการทดสอบและวิธีการส่งคืน / โทรกลับในการจับอาร์กิวเมนต์เพิ่มบรรทัดของรหัสที่ไม่จำเป็นในการทดสอบของคุณ (และ การทดสอบที่ยาวนานเป็นสิ่งที่ไม่ต้องทำสำหรับฉัน)
นี่คือส่วนสำคัญ: https://gist.github.com/Jacob-McKay/8b8d41ebb9565f5fca23654fd944ac6bพร้อมส่วนขยาย Moq (4.12) ที่ฉันเขียนซึ่งให้วิธีการที่ชัดเจนมากขึ้นในการยืนยันเกี่ยวกับข้อโต้แย้งที่ส่งผ่านไปยัง mocks โดยไม่มีข้อเสียดังกล่าวข้างต้น นี่คือลักษณะที่ตรวจสอบในตอนนี้:
mockDependency
.CheckMethodWasCalledOnce(nameof(IExampleDependency.PersistThings))
.WithArg<InThing2>(inThing2 =>
{
Assert.Equal("Input Data with Important additional data", inThing2.Prop1);
Assert.Equal("I need a trim", inThing2.Prop2);
})
.AndArg<InThing3>(inThing3 =>
{
Assert.Equal("Important Default Value", inThing3.Prop1);
Assert.Equal("I NEED TO BE UPPER CASED", inThing3.Prop2);
});
ฉันจะถูก stoked ถ้า Moq ให้คุณสมบัติที่ทำสิ่งเดียวกันในขณะที่เป็นการประกาศและการแยกความล้มเหลวนี้ ไขว้นิ้วเอาไว้!