(ตรงกันข้ามกับคำตอบของ mcottle) คำตอบยาว: ไม่ ... ส่วนใหญ่
เมื่อคุณพูดว่าคุณคาดว่าการทดสอบจะเพิ่มข้อยกเว้นเฉพาะคุณจะรู้ว่าเมื่อใดที่บรรทัดใด ๆ ในการทดสอบนั้นยกข้อยกเว้นนั้นขึ้น
นั่นไม่ใช่สิ่งเดียวกันกับที่รู้ว่าวิธีการทดสอบจะทำให้เกิดข้อยกเว้น
หากการทดสอบของคุณเกี่ยวข้องกับการตั้งค่าวัตถุหรือบริบท (ภายในการทดสอบไม่ใช่ภายในกรอบการทำงานของกรอบSetUp
) คุณอาจจะดีกว่าการตัดบรรทัดเดียวที่คุณต้องการทดสอบในแบบลอง / จับอาจเป็นผู้ช่วยได้
ตัวอย่างเช่น
public static class AssertHelper {
public delegate void Thunk();
public static void DoesNotThrow<T>(Thunk thunk, string message = "")
where T: Exception {
try {
thunk.Invoke();
} catch(T) {
Assert.Fail(message);
}
}
}
แล้ว
[TestMethod]
public void assertHelperInAction() {
// Random setup stuff here that's too annoying to put in my SetUp
// method.
AssertHelper.DoesNotThrow<IllegalArgumentException>(() =>
{/* My random method under test */})
}
หากการทดสอบนี้ล้มเหลวฉันรู้ว่าวิธีการของฉันภายใต้การทดสอบนั้นทำให้เกิดข้อยกเว้นและไม่ใช่บางอย่างในการตั้งค่าแบบสุ่ม
(คุณควรลองและหลีกเลี่ยงการตั้งค่าแบบสุ่มบางครั้งจะง่ายกว่าที่จะมีรหัสการตั้งค่าในการทดสอบ)