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.
1. 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.
2. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Wprowadzenie do NUnit
Wybrane atrybuty NUnit
Asercje w modelu klasycznym
Asercje w modelu ograniczeń
3. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
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.
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 3
4. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
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.
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 4
5. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
namespace Bnsit.Tdd.Intro
{
Oznaczenie fixture
[TestFixture]
public class StringI18Test
{
Adnotacja oznaczająca test
[Test]
public void TestDifferentLanguageVersions()
{
Hashtable versions = new Hashtable();
versions.Add(quot;plquot;, quot;Dzień dobry przyjacieluquot;);
versions.Add(quot;dequot;, quot;Hallo Freundquot;); Sprawdzenia - asercje
versions.Add(quot;enquot;, quot;Hello friendquot;);
StringI18n stringI18n = new StringI18n(versions);
Assert.That(quot;Dzień dobry przyjacieluquot;
.Equals(stringI18n.FindMessage( quot;plquot; )));
Assert.That(quot;Hallo Freundquot;.Equals(stringI18n.FindMessage(quot;dequot;)));
Assert.That(quot;Hello friendquot;.Equals(stringI18n.FindMessage(quot;enquot;)));
}
}
}
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 5
6. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
Klasa testowa musi spełniać
następujące warunki:
musi być publiczna,
nie może być abstrakcyjna,
musi posiadać domyślny konstruktor.
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 6
7. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
[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 = quot;To jest napisquot;;
Assert.That(text.ToString().Equals(quot;To jest napisquot;));
}
}
}
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 7
8. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
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 = quot;Odwołaniequot;,
UserMessage = quot;Should be nullquot;,
MatchType = MessageMatch.Contains )]
public void TestExpectedException()
{
String text = null;
Assert.That(text.ToString().Equals(quot;textquot;));
}
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 8
9. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
[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.
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 9
10. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
[TestFixture]
public class StringI18Test
{
Hashtable versions = new Hashtable();
[TestFixtureSetUp]
public void InitTests()
{
versions.Add(quot;plquot;, quot;Dzień dobry przyjacieluquot;);
versions.Add(quot;dequot;, quot;Hallo Freundquot;);
versions.Add(quot;enquot;, quot;Hello friendquot;);
}
[Test]
public void TestDifferentLanguageVersions()
{
StringI18n stringI18n = new StringI18n(versions);
Assert.That(quot;Dzień dobry przyjacieluquot;
.Equals(stringI18n.FindMessage(quot;plquot;)));
Assert.That(quot;Hallo Freundquot;.Equals(stringI18n.FindMessage(quot;dequot;)));
Assert.That(quot;Hello friendquot;.Equals(stringI18n.FindMessage(quot;enquot;)));
}
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 10
11. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
[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.
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 11
12. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
[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).
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 12
13. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
[Ignore] – test oznaczony tym atrybutem nie
wykona się.
Służy do czasowego wyłączania testów.
[Test]
[Ignore(quot;Test wycofanyquot;)]
public void TestToString()
{
String text = quot;To jest napisquot;;
Assert.That(text.ToString().Equals(quot;To jest napisquot;));
}
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 13
14. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
[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;
}
}
}
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 14
15. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
[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(quot;Introductoryquot;)]
public void TestToString()
{
String text = quot;To jest napisquot;;
Assert.That(text.ToString().Equals(quot;To jest napisquot;));
}
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 15
16. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
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.
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 16
17. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
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.
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 17
18. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
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.
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 18
19. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie
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 = quot;Helloquot;;
Hashtable versions = new Hashtable();
Assert.That(myString, Is.EqualTo(quot;Helloquot;));
Assert.That(myString, Is.Not.Null);
Assert.That(versions, Is.Empty);
Assert.That(2 + 2, Is.GreaterThan(3) & Is.LessThan(5));
}
Tworzenie i testowanie aplikacji z użyciem Test-Driven Development 19