Assert.Multiple

NUnit w wersji 3.6 wprowadził dość ciekawą funkcję – Assert.Multiple. Dzięki niej, dostajemy informacje na temat wszystkich testów, które nie przeszły. Przyjrzyjmy się temu bliżej…

Do tej pory, używając kilku asercji naraz, jedna niespełniona asercja powodowała, że dalszy kod nie jest wykonywany.

Na przykład:

Assert.That(2 + 2, Is.EqualTo(4));
Assert.That(2 + 2, Is.EqualTo(5));
Assert.That(2 + 2, Is.EqualTo(6));

Dla powyższego kodu:

  • Pierwsza asercja jest spełniona, idziemy dalej.
  • Druga asercja nie jest spełniona, w związku z czym dalsze wykonanie kodu jest przerwane.
  • Nie wiemy czy trzecia asercja jest spełniona lub nie.

Assert.Multiple działa następująco:

  • W przypadku czerwonego testu, dalsze asercje wykonywane są nadal.
  • W komunikacie błędu dostajemy informacje nt. wszystkich niespełnionych asercji.

Dla kodu:

Assert.Multiple(() =>
{
    Assert.That(2 + 2, Is.EqualTo(4));
    Assert.That(2 + 2, Is.EqualTo(5));
    Assert.That(2 + 2, Is.EqualTo(6));
});

Otrzymamy komunikat:

One or more failures in Multiple Assert block:

1) Expected: 5

But was: 4

2) Expected: 6

But was: 4

Czy to jest nowość w świecie frameworków do testowania? Nie. Analogiczną funkcjonalność w Świętej Pamięci MbUnicie można zastosować przez nałożenie atrybutu MultipleAsserts.

Kiedy stosować?

  • Dla testów sparametryzowanych, w dalszym ciągu pozostałbym przy dotychczasowych rozwiązaniach (np. TestCase).
  • Jedna z zasad testowania jednostkowego, mówi nam aby stosować jedną asercję (logiczną) per test. Przykładowo, przy zwracaniu złożonego obiektu, możemy posłużyć się wieloma asercjami, aby poznać które asercje są spełnione, a które nie.
  • Assert.Multiple nadaje się też do testów niejednostkowych, np. integracyjnych, akceptacyjnych, itp., tam gdzie to rozwiązanie daje nam pełniejszy obraz danego testu.

Po więcej, odsyłam do oficjalnej dokumentacji: https://github.com/nunit/docs/wiki/Multiple-Asserts-Spec

One thought on “Assert.Multiple

  1. Pingback: dotnetomaniak.pl

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s