Assert.Throws zwraca zgłoszony wyjątek, który pozwala potwierdzić ten wyjątek.
var ex = Assert.Throws<Exception>(() => user.MakeUserActive());
Assert.That(ex.Message, Is.EqualTo("Actual exception message"));
Jeśli więc nie zostanie zgłoszony żaden wyjątek lub zgłoszony zostanie wyjątek niewłaściwego typu, pierwsze Assert.Throwspotwierdzenie zakończy się niepowodzeniem. Jeśli jednak zostanie zgłoszony wyjątek odpowiedniego typu, możesz teraz potwierdzić faktyczny wyjątek zapisany w zmiennej.
Korzystając z tego wzorca, możesz potwierdzić inne rzeczy niż komunikat wyjątku, np. W przypadku ArgumentExceptioni pochodnych możesz potwierdzić, że nazwa parametru jest poprawna:
var ex = Assert.Throws<ArgumentNullException>(() => foo.Bar(null));
Assert.That(ex.ParamName, Is.EqualTo("bar"));
Możesz również użyć płynnego interfejsu API do wykonywania tych zapewnień:
Assert.That(() => foo.Bar(null),
Throws.Exception
.TypeOf<ArgumentNullException>()
.With.Property("ParamName")
.EqualTo("bar"));
lub alternatywnie
Assert.That(
Assert.Throws<ArgumentNullException>(() =>
foo.Bar(null)
.ParamName,
Is.EqualTo("bar"));
Mała wskazówka przy potwierdzaniu komunikatów o wyjątkach polega na udekorowaniu metody testowej, SetCultureAttributeaby upewnić się, że komunikat o błędzie używa oczekiwanej kultury. Ma to zastosowanie w przypadku przechowywania wiadomości wyjątków jako zasobów umożliwiających lokalizację.