Assert.Throws
trả về ngoại lệ được ném cho phép bạn xác nhận 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ó ngoại lệ được ném, hoặc một ngoại lệ của loại sai được ném, Assert.Throws
khẳng định đầu tiên sẽ thất bại. Tuy nhiên, nếu một ngoại lệ của loại chính xác được ném thì bây giờ 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 các xác nhận sau:
Assert.That(() => foo.Bar(null),
Throws.Exception
.TypeOf<ArgumentNullException>()
.With.Property("ParamName")
.EqualTo("bar"));
Hay cách khác
Assert.That(
Assert.Throws<ArgumentNullException>(() =>
foo.Bar(null)
.ParamName,
Is.EqualTo("bar"));
Một mẹo nhỏ khi khẳng định thông điệp ngoại lệ là trang trí phương thức kiểm tra với SetCultureAttribute
để đảm bảo rằng thông điệp ném được sử dụng văn hóa dự kiến. Điều này phát huy tác dụng nếu bạn lưu trữ các thông điệp ngoại lệ của mình dưới dạng tài nguyên để cho phép bản địa hóa.