Assert.Throws
mengembalikan pengecualian yang dilemparkan yang memungkinkan Anda menegaskan pengecualian.
var ex = Assert.Throws<Exception>(() => user.MakeUserActive());
Assert.That(ex.Message, Is.EqualTo("Actual exception message"));
Jadi, jika tidak ada pengecualian yang dilemparkan, atau pengecualian dari tipe yang salah dilemparkan, Assert.Throws
pernyataan pertama akan gagal. Namun, jika pengecualian dari jenis yang benar dilempar maka Anda sekarang dapat menegaskan pada pengecualian yang sebenarnya Anda simpan dalam variabel.
Dengan menggunakan pola ini Anda dapat menegaskan hal-hal lain selain pesan pengecualian, misalnya dalam kasus ArgumentException
dan turunannya, Anda dapat menegaskan bahwa nama parameter sudah benar:
var ex = Assert.Throws<ArgumentNullException>(() => foo.Bar(null));
Assert.That(ex.ParamName, Is.EqualTo("bar"));
Anda juga dapat menggunakan API yang lancar untuk melakukan pernyataan ini:
Assert.That(() => foo.Bar(null),
Throws.Exception
.TypeOf<ArgumentNullException>()
.With.Property("ParamName")
.EqualTo("bar"));
atau sebagai alternatif
Assert.That(
Assert.Throws<ArgumentNullException>(() =>
foo.Bar(null)
.ParamName,
Is.EqualTo("bar"));
Sedikit tip ketika menegaskan pada pesan pengecualian adalah untuk menghias metode pengujian dengan SetCultureAttribute
untuk memastikan bahwa pesan yang dilemparkan menggunakan budaya yang diharapkan. Ini mulai berlaku jika Anda menyimpan pesan pengecualian sebagai sumber daya untuk memungkinkan pelokalan.