Wprowadzenie do NUnit dla testerów automatyzujących

Autor: Michał Dobrzycki

Wprowadzenie do NUnit

Narzędzie wspierające testy jednostkowe, integracyjne i e2e.

Zasadą działania są Atrybuty, czyli dekoratory naszych funkcji i klas.

Instalacja NUnit / tworzenie nowego projektu

  1. Tworzymy nowy projekt testowy z templatki NUnit Test Project
  2. Podbijamy wersje NUnit i NUnit3TestAdapter do najnowszej
  3. Podbijamy wersje Microsoft.NET.Test.Sdk do najnowszej

Popularną praktyką jest tworzenie projektu testowego w tej samej solucji co projekt główny (testowany).

W ten sposób skonfigurowane jest ćwiczeniowe repo

Jak napisać pierwszy test

  • Tworzymy funkcję w klasie z sufiksem *Tests
  • Klasę dekorujemy atrybutem
    [Test]
  • Robimy Build projektu
  • Uruchamiamy test włączajac z menu głównego
    Test -> Test Explorer

Uruchamiany przed każdym testem

Ważne atrybuty:

[Setup]

Uruchamiany po każdym teście

Ważne atrybuty:

[TearDown]

Asercje

Dokumentacja

Sprawdzamy czy warunek jest True

Assert.True( bool condition );

Sprawdzamy czy warunek jest False

Assert.False( bool condition );

Sprawdzamy czy obiekty (lub typy proste) są sobie równe

Assert.AreEqual( object expected, object actual );

Sprawdzamy czy obiekty (lub typy proste) są sobie równe

Assert.AreEqual( object expected, object actual );

Asercje przewidziane dla stringów

StringAssert

Dokumentacja

Asercje przewidziane dla struktur danych (list, słowników, tablic..)

CollectionAssert

Dokumentacja

Constrainty (ograniczenia)

Assert.That

Dokumentacja

Assert.That(message, Is.EqualTo("Parameter cannot be zero"));
Assert.That(result, Is.LessThanOrEqualTo(1000));

Multiple asserts

Assert.Multiple(() =>
{
	Assert.AreEqual(3, 2+1);
	Assert.AreEqual(5, 2+3);
});

Parametryzacja

Możemy dodać w prosty sposób parametry do testu. Taki dekorator uruchomi test dodawania dwa razy z różnymi danymi.

[TestCase(3, 1, 2)]
[TestCase(0, 0, 0)]
public void TestAddFunction(int result, int a, int b)

Testowanie zakresu też jest możliwe (ten test uruchomi się dla liczb od 5 do 55)

[Test]
public void TestRange([Range(5,55)] int i)

Powtarzanie

Możemy automatycznie powtórzyć test, jeżeli zakończy się failem (podając maksymalną liczbę powtórzeń)

[Test, Retry(5)]

Testowanie wyjątków

Assert.Throws (zwraca nam wyjątek, możemy później sprawdzić jego wiadomość)

Dokumentacja

Assert.Throws<ArgumentException>(() => Klasa.MetodaStatyczna(parametr));

Assert.That + ThrowsConstraint

Dokumentacja

Assert.That(SomeMethod, Throws.TypeOf<ArgumentException>());