xunit - narzędzie do testowania

20
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.

Upload: michal-bartyzel

Post on 01-Jul-2015

2.353 views

Category:

Technology


1 download

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

Page 1: xUnit - narzędzie do testowania

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.

Page 2: xUnit - narzędzie do testowania

Katalog szkoleń Harmonogram szkoleń Zadaj pytanie

Wprowadzenie do NUnit

Wybrane atrybuty NUnit

Asercje w modelu klasycznym

Asercje w modelu ograniczeń

Page 3: xUnit - narzędzie do testowania

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.

Page 4: xUnit - narzędzie do testowania

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.

Page 5: xUnit - narzędzie do testowania

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

Page 6: xUnit - narzędzie do testowania

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.

Page 7: xUnit - narzędzie do testowania

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"));

}

}

}

Page 8: xUnit - narzędzie do testowania

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"));

}

Page 9: xUnit - narzędzie do testowania

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.

Page 10: xUnit - narzędzie do testowania

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")));

}

Page 11: xUnit - narzędzie do testowania

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.

Page 12: xUnit - narzędzie do testowania

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).

Page 13: xUnit - narzędzie do testowania

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"));

}

Page 14: xUnit - narzędzie do testowania

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;

}

}

}

Page 15: xUnit - narzędzie do testowania

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"));

}

Page 16: xUnit - narzędzie do testowania

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.

Page 17: xUnit - narzędzie do testowania

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.

Page 18: xUnit - narzędzie do testowania

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.

Page 19: xUnit - narzędzie do testowania

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));

}

Page 20: xUnit - narzędzie do testowania

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