xunit - narzędzie do testowania
Embed Size (px)
DESCRIPTION
Niniejszy plik jest materiałem reklamowym BNS IT s.c. i pozostaje własnością intelektualną BNS IT s.c.. Może być rozpowszechniany tylko w takiej postaci w jakiej jest. Używanie zawartych tu treści i form bez zaznaczenia autorstwa i pochodzenia pliku, zwłaszcza na użytek prowadzenia szkoleń, wykładów i wystąpień publicznych, jest zabronione.TRANSCRIPT

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Moduł 3
Niniejszy plik jest materiałem reklamowym BNS IT s.c. i pozostaje własnością intelektualną BNS IT s.c..
Może być rozpowszechniany tylko w takiej postaci w jakiej jest. Używanie zawartych tu treści i form bez
zaznaczenia autorstwa i pochodzenia pliku, zwłaszcza na użytek prowadzenia szkoleń, wykładów i
wystąpień publicznych, jest zabronione.

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Wprowadzenie do NUnit
Wybrane atrybuty NUnit
Asercje w modelu klasycznym
Asercje w modelu ograniczeń

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 3
Popularne narzędzie do testowania w
języku C#.
Test Runner uruchamia się jako
niezależna aplikacja.
Narzędzie potrafi uruchamiać testy
pojedynczo i zbiorowo.

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 4
Nastawiony na asercje.
Klasa testowa musi być oznaczona
atrybutem [TestFixture].
Metody testowe muszą być oznaczone
atrybutem [Test].
Testy ze względów porządkowych
warto wydzielić do osobnego katalogu
tests.

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 5
namespace Bnsit.Tdd.Intro
{
[TestFixture]
public class StringI18Test
{
[Test]
public void TestDifferentLanguageVersions()
{
Hashtable versions = new Hashtable();
versions.Add("pl", "Dzień dobry przyjacielu");
versions.Add("de", "Hallo Freund");
versions.Add("en", "Hello friend");
StringI18n stringI18n = new StringI18n(versions);
Assert.That("Dzień dobry przyjacielu"
.Equals(stringI18n.FindMessage( "pl" )));
Assert.That("Hallo Freund".Equals(stringI18n.FindMessage("de")));
Assert.That("Hello friend".Equals(stringI18n.FindMessage("en")));
}
}
}
Oznaczenie fixture
Adnotacja oznaczająca test
Sprawdzenia - asercje

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 6
Klasa testowa musi spełniać
następujące warunki:
musi być publiczna,
nie może być abstrakcyjna,
musi posiadać domyślny konstruktor.

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 7
[Test] - dana metoda zostanie
potraktowana jako test.
Metoda musi mieć sygnaturę
public void NazwaMetody()namespace Bnsit.Tdd.Intro
{
[TestFixture]
public class SampleTest
{
[Test]
public void TestToString()
{
String text = "To jest napis";
Assert.That(text.ToString().Equals("To jest napis"));
}
}
}

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 8
ExceptionType – typ spodziewanego wyjątku
ExpectedMessage – spodziewany komunikat
UserMessage – komunikat w przypadku nie
wystąpienia wyjątku w odpowiedniej postaci
MatchType – dopasowanie komunikatu Contains,
Exact, Regex[Test]
[ExpectedException(
ExceptionType = typeof(NullReferenceException),
ExpectedMessage = "Odwołanie",
UserMessage = "Should be null",
MatchType = MessageMatch.Contains )]
public void TestExpectedException()
{
String text = null;
Assert.That(text.ToString().Equals("text"));
}

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 9
[TestFixtureSetUp] – metoda zostanie wykonana raz przed wszystkimi testami w danej klasie.Zazwyczaj używana do inicjacji współdzielonych zmiennych przez wszystkie testy. Może być używana np. do inicjacji połączenia z bazą danych.
[TestFixtureTearDown] – metoda zostanie wykonana raz po wszystkich testach w danej klasie.Podobnie jak wyżej. Dotyczy procesu kończenia testu.

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 10
[TestFixture]
public class StringI18Test
{
Hashtable versions = new Hashtable();
[TestFixtureSetUp]
public void InitTests()
{
versions.Add("pl", "Dzień dobry przyjacielu");
versions.Add("de", "Hallo Freund");
versions.Add("en", "Hello friend");
}
[Test]
public void TestDifferentLanguageVersions()
{
StringI18n stringI18n = new StringI18n(versions);
Assert.That("Dzień dobry przyjacielu"
.Equals(stringI18n.FindMessage("pl")));
Assert.That("Hallo Freund".Equals(stringI18n.FindMessage("de")));
Assert.That("Hello friend".Equals(stringI18n.FindMessage("en")));
}

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 11
[SetUp] – metoda zostanie wykonana przed
każdym testem w danej klasie.
Zazwyczaj używana do inicjacji współdzielonych
zmiennych przez wszystkie testy w klasie.
Służy do ustawiania tego samego stanu początkowego
dla każdego testu .
[TearDown] – metoda zostanie wykonana po
każdym teście w danej klasie.
Podobnie jak wyżej. Dotyczy procesu kończenia
testu.

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 12
[SetupFixture] – oznaczenie klasy, w której
znajdą się metody z atrybutami [SetUp] i
[TearDown]
Metody te wykonają się raz przed i po wszystkich
testach z wszystkich klas w danej przestrzeni
nazw.
Jeśli klasa z takim atrybutem znajduje się poza
przestrzenią nazw, będzie dotyczyć wszystkich
testów w danym podzespole (ang. assembly).

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 13
[Ignore] – test oznaczony tym atrybutem nie
wykona się.
Służy do czasowego wyłączania testów.
[Test]
[Ignore("Test wycofany")]
public void TestToString()
{
String text = "To jest napis";
Assert.That(text.ToString().Equals("To jest napis"));
}

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 14
[Suite] – oznaczenie metody w klasie, która ma
uruchamiać zestaw testów
Przydatne, gdy wśród testów możemy wyróżnić
grupy testów, które chcemy uruchamiać osobno.
class SuiteTest
{
[Suite]
public static IEnumerable Suite
{
get
{
ArrayList suite = new ArrayList();
suite.Add(new SampleTest());
suite.Add(new StringI18Test());
return suite;
}
}
}

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 15
[Category] – testy lub klasy testowe możemy
opatrywać nazwą.
Przydatne, gdy wśród testów możemy wyróżnić
nazwą grupy testów, które chcemy uruchamiać
osobno.
[Test]
[Category("Introductory")]
public void TestToString()
{
String text = "To jest napis";
Assert.That(text.ToString().Equals("To jest napis"));
}

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 16
Assert.AreEqual( wartość_oczekiwana, wartość_aktualna[, string komunikat] )
Assert.AreEqual( wartość_oczekiwana, wartość_aktualna[, string komunikat] )
Należy zachowywać kolejność wartość oczekiwana –aktualna, gdyż tylko wtedy komunikaty generowane przez NUnit będą w sposób prawidłowy informowały o przebiegu procesu testowania.
Komunikat jest opcjonalny.
Można go dodać, aby uściślić przyczynę niepowodzenia testu.

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 17
Assert.IsNull( referencja [, string komunikat] )
Assert.IsNotNull( referencja [, string komunikat] )
Sprawdza czy podana referencja to null lub nie null.
Assert.AreSame( referencja_oczekiwana, referencja_aktualna
[, string komunikat] )
Assert.AreNotSame(referencja_oczekiwana, referencja_aktualna
[, string komunikat] )
Sprawdza czy podane referencje wskazują
(lub nie) na ten sam obiekt.

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 18
Assert.IsTrue( bool warunek [, string komunikat] )
Assert.IsNotTrue( bool warunek [, string komunikat] )
Sprawdza czy podany warunek jest prawdziwy lub fałszywy.
Assert.Fail( [ string komunikat ] )
Powoduje, że test, którego sterowanie dochodzi do tego miejsca, nie przechodzi.
Najczęściej używane do zaawansowanego testowania wyjątków.

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 19
Assert.That( bool warunek [, string komunikat] )
Assert.That( wartość_oczekiwana, IConstraint ograniczenie,
[, string komunikat] )
W tym modelu używana jest pojedyncza metoda
Assert.That, zaś warunki sprawdzane są za
pomocą obiektów ograniczeń. Na przykład:
[Test]
public void TestAssertThat()
{
String myString = "Hello";
Hashtable versions = new Hashtable();
Assert.That(myString, Is.EqualTo("Hello"));
Assert.That(myString, Is.Not.Null);
Assert.That(versions, Is.Empty);
Assert.That(2 + 2, Is.GreaterThan(3) & Is.LessThan(5));
}

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Zwiększanie efektywności programistów i zespołów programistycznych 20
BNS IT
Al. Wyszyńskiego 22/17
94-042 Łódź
E-mail: [email protected]
Tel.:+48 42 209 38 45
Fax.: +48 42 209 38 63