(Trái ngược với câu trả lời của maptle) Câu trả lời dài: KHÔNG ... hầu hết thời gian
Khi bạn nói rằng bạn mong đợi một bài kiểm tra đưa ra một ngoại lệ cụ thể, bạn sẽ biết khi nào BẤT K line dòng nào trong bài kiểm tra đó làm tăng ngoại lệ cụ thể đó.
Điều đó không hoàn toàn giống với việc biết rằng phương pháp được thử nghiệm đưa ra ngoại lệ.
Nếu thử nghiệm của bạn liên quan đến việc thiết lập một đối tượng hoặc bối cảnh (trong thử nghiệm, không phải trong phiên bản khung của bạn SetUp
), bạn có thể tốt hơn nên gói một dòng duy nhất mà bạn thực sự muốn thử trong một lần thử / bắt, có thể với một người trợ giúp.
Ví dụ,
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);
}
}
}
và sau đó
[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 */})
}
Nếu thử nghiệm này thất bại, tôi biết rằng phương pháp của tôi trong thử nghiệm đã ném ngoại lệ và không phải là thứ gì đó trong công cụ thiết lập ngẫu nhiên.
(Bạn nên thử và tránh các công cụ thiết lập ngẫu nhiên. Đôi khi, có một số mã thiết lập trong thử nghiệm sẽ dễ dàng hơn.)