Assert.Throws
ส่งกลับข้อยกเว้นที่ถูกส่งออกไปซึ่งช่วยให้คุณสามารถยืนยันข้อยกเว้นได้
var ex = Assert.Throws<Exception>(() => user.MakeUserActive());
Assert.That(ex.Message, Is.EqualTo("Actual exception message"));
ดังนั้นหากไม่มีข้อยกเว้นถูกโยนทิ้งหรือมีการยกเว้นประเภทที่ไม่ถูกต้องการAssert.Throws
ยืนยันครั้งแรกจะล้มเหลว อย่างไรก็ตามหากมีการโยนข้อยกเว้นประเภทที่ถูกต้องคุณสามารถยืนยันข้อยกเว้นจริงที่คุณบันทึกไว้ในตัวแปรได้
โดยใช้รูปแบบนี้คุณสามารถยืนยันสิ่งอื่นนอกเหนือจากข้อความข้อยกเว้นเช่นในกรณีของArgumentException
และอนุพันธ์คุณสามารถยืนยันว่าชื่อพารามิเตอร์ถูกต้อง:
var ex = Assert.Throws<ArgumentNullException>(() => foo.Bar(null));
Assert.That(ex.ParamName, Is.EqualTo("bar"));
นอกจากนี้คุณยังสามารถใช้ API ได้อย่างคล่องแคล่วสำหรับการยืนยันเหล่านี้:
Assert.That(() => foo.Bar(null),
Throws.Exception
.TypeOf<ArgumentNullException>()
.With.Property("ParamName")
.EqualTo("bar"));
หรืออีกวิธีหนึ่ง
Assert.That(
Assert.Throws<ArgumentNullException>(() =>
foo.Bar(null)
.ParamName,
Is.EqualTo("bar"));
เคล็ดลับเล็กน้อยเมื่อเข้าไปยุ่งกับข้อความแสดงข้อยกเว้นคือการตกแต่งวิธีทดสอบด้วยSetCultureAttribute
เพื่อให้แน่ใจว่าข้อความที่ส่งออกมานั้นใช้วัฒนธรรมที่คาดหวังไว้ สิ่งนี้เข้ามาเล่นถ้าคุณเก็บข้อความข้อยกเว้นของคุณเป็นทรัพยากรเพื่ออนุญาตให้มีการแปล