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.Throws
potwierdzenie 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 ArgumentException
i 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, SetCultureAttribute
aby 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ę.