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.
Anda sekarang dapat menggunakan
ExpectedException
atribut, missumber
Assert.Throw
Anda dapat menargetkan garis tepat yang Anda minati.sumber
Assert.That(myTestDelegate, Throws.ArgumentException .With.Property(nameof(ArgumentException.Message)).EqualTo("your argument is invalid."));
Exception.Message
. Saya masih akan merekomendasikan untuk setidaknya menambahkan alternatif ini karenaWith.Property
dapat digunakan pada objek lain juga, yang mana kasus ini akan meningkatkan stabilitas kode.Ini adalah pertanyaan lama namun relevan dengan jawaban yang sudah usang jadi saya menambahkan solusi saat ini:
Ini bekerja dengan
using Microsoft.VisualStudio.TestTools.UnitTesting;
sumber
Untuk memperluas jawaban persisten, dan untuk memberikan lebih banyak fungsi NUnit, Anda dapat melakukan ini:
Contoh:
sumber
Ini sudah lama sejak masalah ini diangkat, saya sadar, tetapi saya baru-baru ini mengalami hal yang sama, dan menyarankan fungsi ini untuk MSTest:
pemakaian:
Lebih lanjut di sini: http://phejndorf.wordpress.com/2011/02/21/assert-that-a-particular-exception-has-occured/
sumber
Karena saya terganggu oleh verbositas dari beberapa pola NUnit baru, saya menggunakan sesuatu seperti ini untuk membuat kode yang lebih bersih bagi saya secara pribadi:
Maka penggunaannya adalah:
sumber