Autor: Michał Dobrzycki
Narzędzie wspierające testy jednostkowe, integracyjne i e2e.
Zasadą działania są Atrybuty, czyli dekoratory naszych funkcji i klas.
Popularną praktyką jest tworzenie projektu testowego w tej samej solucji co projekt główny (testowany).
W ten sposób skonfigurowane jest ćwiczeniowe repo
[Test]
Test -> Test Explorer
Uruchamiany przed każdym testem
Ważne atrybuty:
[Setup]
Uruchamiany po każdym teście
Ważne atrybuty:
[TearDown]
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
Asercje przewidziane dla struktur danych (list, słowników, tablic..)
CollectionAssert
Constrainty (ograniczenia)
Assert.That
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);
});
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)
Możemy automatycznie powtórzyć test, jeżeli zakończy się failem (podając maksymalną liczbę powtórzeń)
[Test, Retry(5)]
Assert.Throws (zwraca nam wyjątek, możemy później sprawdzić jego wiadomość)
Assert.Throws<ArgumentException>(() => Klasa.MetodaStatyczna(parametr));
Assert.That + ThrowsConstraint
Assert.That(SomeMethod, Throws.TypeOf<ArgumentException>());