Assert.Throws
trả lại ngoại lệ được ném cho phép bạn xác nhận về ngoại lệ.
var ex = Assert.Throws<Exception>(() => user.MakeUserActive());
Assert.That(ex.Message, Is.EqualTo("Actual exception message"));
Vì vậy, nếu không có trường hợp ngoại lệ được ném hoặc loại trừ sai được ném, xác nhận Assert.Throws
đầu tiên sẽ không thành công. Tuy nhiên, nếu loại trừ đúng loại được ném thì bạn có thể xác nhận về ngoại lệ thực tế mà bạn đã lưu trong biến.
Bằng cách sử dụng mẫu này, bạn có thể khẳng định những thứ khác ngoài thông báo ngoại lệ, ví dụ: trong trường hợp ArgumentException
và các dẫn xuất, bạn có thể khẳng định rằng tên tham số là chính xác:
var ex = Assert.Throws<ArgumentNullException>(() => foo.Bar(null));
Assert.That(ex.ParamName, Is.EqualTo("bar"));
Bạn cũng có thể sử dụng API thông thạo để thực hiện điều này khẳng định:
Assert.That(() => foo.Bar(null),
Throws.Exception
.TypeOf<ArgumentNullException>()
.With.Property("ParamName")
.EqualTo("bar"));
Một mẹo nhỏ khi khẳng định trên thông báo ngoại lệ là để trang trí phương pháp thử nghiệm với SetCultureAttribute
để đảm bảo rằng thư được gửi đang sử dụng văn hóa mong muốn. Điều này xuất hiện nếu bạn lưu trữ các thông báo ngoại lệ của mình dưới dạng tài nguyên để cho phép bản địa hóa.
Nguồn
2009-10-22 19:49:19
Điều này thực sự hữu ích cho tôi - Tôi muốn có cách hiển thị lỗi, tôi thậm chí không đọc nếu một giá trị được trả về bằng phương thức Assert.Throws. Cảm ơn – Haroon
+1 Cảm ơn bạn đã hiển thị API thông thạo, vì một số lý do tôi gặp sự cố khi hiểu cách sử dụng nó chỉ từ tài liệu NUnit. – aolszowka