SlideShare una empresa de Scribd logo
1 de 20
Descargar para leer sin conexión
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




  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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Katalog szkoleń    Harmonogram szkoleń                       Zadaj pytanie




                                          BNS IT
                                          Al. Wyszyńskiego 22/17
                                          94-042 Łódź
                                          E-mail: bnsit@bnsit.pl
                                          Tel.:+48 42 209 38 45
                                          Fax.: +48 42 209 38 63




                  Zwiększanie efektywności programistów i zespołów programistycznych   20

Más contenido relacionado

Similar a xUnit - narzędzie do testowania

Poznańska grupa .Net spotkanie VI - Test Driven Development
Poznańska grupa .Net spotkanie VI - Test Driven DevelopmentPoznańska grupa .Net spotkanie VI - Test Driven Development
Poznańska grupa .Net spotkanie VI - Test Driven Developmentbartlomiej.szafko
 
Podstawy testowania oprogramowania INCO 2023.pptx
Podstawy testowania oprogramowania INCO 2023.pptxPodstawy testowania oprogramowania INCO 2023.pptx
Podstawy testowania oprogramowania INCO 2023.pptxKatarzyna Javaheri-Szpak
 
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13kraqa
 
Edukacja testerska na Quality in IT
Edukacja testerska na Quality in ITEdukacja testerska na Quality in IT
Edukacja testerska na Quality in ITRadoslaw Smilgin
 
O wezu przy kawie
O wezu przy kawieO wezu przy kawie
O wezu przy kawiekraqa
 
Testowanie oprogramowania dla początkujących - Escola Software house
Testowanie oprogramowania dla początkujących - Escola Software houseTestowanie oprogramowania dla początkujących - Escola Software house
Testowanie oprogramowania dla początkujących - Escola Software houseEscola S.A.
 
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMH
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMHJDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMH
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMHPROIDEA
 
Confitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ AllegroConfitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ Allegroallegro.tech
 
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł GrajewskiPROIDEA
 
AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptJacek Okrojek
 
Platforma do przeprowadzania egzaminów online
Platforma do przeprowadzania egzaminów onlinePlatforma do przeprowadzania egzaminów online
Platforma do przeprowadzania egzaminów onlineRadoslaw Smilgin
 
Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.
Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.
Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.Future Processing
 
Testowanie. Wprowadzenie do testowania oprogramowania.
Testowanie. Wprowadzenie do testowania oprogramowania. Testowanie. Wprowadzenie do testowania oprogramowania.
Testowanie. Wprowadzenie do testowania oprogramowania. Radoslaw Smilgin
 
Perl. Testowanie. Zapiski programisty
Perl. Testowanie. Zapiski programistyPerl. Testowanie. Zapiski programisty
Perl. Testowanie. Zapiski programistyWydawnictwo Helion
 
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...PROIDEA
 

Similar a xUnit - narzędzie do testowania (20)

Poznańska grupa .Net spotkanie VI - Test Driven Development
Poznańska grupa .Net spotkanie VI - Test Driven DevelopmentPoznańska grupa .Net spotkanie VI - Test Driven Development
Poznańska grupa .Net spotkanie VI - Test Driven Development
 
Podstawy testowania oprogramowania INCO 2023.pptx
Podstawy testowania oprogramowania INCO 2023.pptxPodstawy testowania oprogramowania INCO 2023.pptx
Podstawy testowania oprogramowania INCO 2023.pptx
 
Wprowadzenie do PHPUnit
Wprowadzenie do PHPUnitWprowadzenie do PHPUnit
Wprowadzenie do PHPUnit
 
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
 
Edukacja testerska na Quality in IT
Edukacja testerska na Quality in ITEdukacja testerska na Quality in IT
Edukacja testerska na Quality in IT
 
O wezu przy kawie
O wezu przy kawieO wezu przy kawie
O wezu przy kawie
 
Benchmarking
Benchmarking Benchmarking
Benchmarking
 
[TestWarez 2017] Zen testów wydajnościowych
[TestWarez 2017] Zen testów wydajnościowych[TestWarez 2017] Zen testów wydajnościowych
[TestWarez 2017] Zen testów wydajnościowych
 
Testowanie oprogramowania dla początkujących - Escola Software house
Testowanie oprogramowania dla początkujących - Escola Software houseTestowanie oprogramowania dla początkujących - Escola Software house
Testowanie oprogramowania dla początkujących - Escola Software house
 
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMH
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMHJDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMH
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMH
 
Confitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ AllegroConfitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ Allegro
 
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
 
AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScript
 
Platforma do przeprowadzania egzaminów online
Platforma do przeprowadzania egzaminów onlinePlatforma do przeprowadzania egzaminów online
Platforma do przeprowadzania egzaminów online
 
Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.
Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.
Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.
 
Testowanie. Wprowadzenie do testowania oprogramowania.
Testowanie. Wprowadzenie do testowania oprogramowania. Testowanie. Wprowadzenie do testowania oprogramowania.
Testowanie. Wprowadzenie do testowania oprogramowania.
 
Diagram sekwencji
Diagram sekwencjiDiagram sekwencji
Diagram sekwencji
 
Perl. Testowanie. Zapiski programisty
Perl. Testowanie. Zapiski programistyPerl. Testowanie. Zapiski programisty
Perl. Testowanie. Zapiski programisty
 
[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...
[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...
[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...
 
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
 

Más de Michał Bartyzel

Developer prowadzi szkolenia
Developer prowadzi szkoleniaDeveloper prowadzi szkolenia
Developer prowadzi szkoleniaMichał Bartyzel
 
Jak sprzedać refaktoryzację? Nordea Bank AB Case
Jak sprzedać refaktoryzację? Nordea Bank AB CaseJak sprzedać refaktoryzację? Nordea Bank AB Case
Jak sprzedać refaktoryzację? Nordea Bank AB CaseMichał Bartyzel
 
[PL, 2017] Conversation Patterns for Software Professionals
[PL, 2017] Conversation Patterns for Software Professionals[PL, 2017] Conversation Patterns for Software Professionals
[PL, 2017] Conversation Patterns for Software ProfessionalsMichał Bartyzel
 
Od codziennej higieny do strategicznej refaktoryzacji
Od codziennej higieny do strategicznej refaktoryzacjiOd codziennej higieny do strategicznej refaktoryzacji
Od codziennej higieny do strategicznej refaktoryzacjiMichał Bartyzel
 
[Geek Girls Carrots] Agile being
[Geek Girls Carrots] Agile being[Geek Girls Carrots] Agile being
[Geek Girls Carrots] Agile beingMichał Bartyzel
 
Co jest czym w obszarze miękkim?
Co jest czym w obszarze miękkim?Co jest czym w obszarze miękkim?
Co jest czym w obszarze miękkim?Michał Bartyzel
 
[chamberconf] Z czym mierzą się zespoły?
[chamberconf] Z czym mierzą się zespoły?[chamberconf] Z czym mierzą się zespoły?
[chamberconf] Z czym mierzą się zespoły?Michał Bartyzel
 
[JUG, PL] Strategiczna refaktoryzacja
[JUG, PL] Strategiczna refaktoryzacja[JUG, PL] Strategiczna refaktoryzacja
[JUG, PL] Strategiczna refaktoryzacjaMichał Bartyzel
 
[Agile2014] Conversation Patterns for Software Professionals
[Agile2014] Conversation Patterns for Software Professionals[Agile2014] Conversation Patterns for Software Professionals
[Agile2014] Conversation Patterns for Software ProfessionalsMichał Bartyzel
 
[Pl] conversation patterns for software professionals
[Pl] conversation patterns for software professionals[Pl] conversation patterns for software professionals
[Pl] conversation patterns for software professionalsMichał Bartyzel
 
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...Michał Bartyzel
 
Szybko czy dobrze. jak współpracować z biznesem i nie dać się zwieść pozornym...
Szybko czy dobrze. jak współpracować z biznesem i nie dać się zwieść pozornym...Szybko czy dobrze. jak współpracować z biznesem i nie dać się zwieść pozornym...
Szybko czy dobrze. jak współpracować z biznesem i nie dać się zwieść pozornym...Michał Bartyzel
 
Conversation patters for ubiquitous language
Conversation patters for ubiquitous languageConversation patters for ubiquitous language
Conversation patters for ubiquitous languageMichał Bartyzel
 
[33rd] x driven-y niczego nie zmienią
[33rd] x driven-y niczego nie zmienią[33rd] x driven-y niczego nie zmienią
[33rd] x driven-y niczego nie zmieniąMichał Bartyzel
 
[4 developers] Jak zniszczyć swój kod - podstawy lingwistyki dla programistów
[4 developers] Jak zniszczyć swój kod - podstawy lingwistyki dla programistów[4 developers] Jak zniszczyć swój kod - podstawy lingwistyki dla programistów
[4 developers] Jak zniszczyć swój kod - podstawy lingwistyki dla programistówMichał Bartyzel
 

Más de Michał Bartyzel (18)

Developer prowadzi szkolenia
Developer prowadzi szkoleniaDeveloper prowadzi szkolenia
Developer prowadzi szkolenia
 
Getting Things Programmed
Getting Things ProgrammedGetting Things Programmed
Getting Things Programmed
 
Jak sprzedać refaktoryzację? Nordea Bank AB Case
Jak sprzedać refaktoryzację? Nordea Bank AB CaseJak sprzedać refaktoryzację? Nordea Bank AB Case
Jak sprzedać refaktoryzację? Nordea Bank AB Case
 
[PL, 2017] Conversation Patterns for Software Professionals
[PL, 2017] Conversation Patterns for Software Professionals[PL, 2017] Conversation Patterns for Software Professionals
[PL, 2017] Conversation Patterns for Software Professionals
 
Od codziennej higieny do strategicznej refaktoryzacji
Od codziennej higieny do strategicznej refaktoryzacjiOd codziennej higieny do strategicznej refaktoryzacji
Od codziennej higieny do strategicznej refaktoryzacji
 
Kanban na lodówce
Kanban na lodówceKanban na lodówce
Kanban na lodówce
 
[Geek Girls Carrots] Agile being
[Geek Girls Carrots] Agile being[Geek Girls Carrots] Agile being
[Geek Girls Carrots] Agile being
 
Co jest czym w obszarze miękkim?
Co jest czym w obszarze miękkim?Co jest czym w obszarze miękkim?
Co jest czym w obszarze miękkim?
 
[chamberconf] Z czym mierzą się zespoły?
[chamberconf] Z czym mierzą się zespoły?[chamberconf] Z czym mierzą się zespoły?
[chamberconf] Z czym mierzą się zespoły?
 
[JUG, PL] Strategiczna refaktoryzacja
[JUG, PL] Strategiczna refaktoryzacja[JUG, PL] Strategiczna refaktoryzacja
[JUG, PL] Strategiczna refaktoryzacja
 
[Agile2014] Conversation Patterns for Software Professionals
[Agile2014] Conversation Patterns for Software Professionals[Agile2014] Conversation Patterns for Software Professionals
[Agile2014] Conversation Patterns for Software Professionals
 
[Pl] conversation patterns for software professionals
[Pl] conversation patterns for software professionals[Pl] conversation patterns for software professionals
[Pl] conversation patterns for software professionals
 
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...
 
Szybko czy dobrze. jak współpracować z biznesem i nie dać się zwieść pozornym...
Szybko czy dobrze. jak współpracować z biznesem i nie dać się zwieść pozornym...Szybko czy dobrze. jak współpracować z biznesem i nie dać się zwieść pozornym...
Szybko czy dobrze. jak współpracować z biznesem i nie dać się zwieść pozornym...
 
Conversation patters for ubiquitous language
Conversation patters for ubiquitous languageConversation patters for ubiquitous language
Conversation patters for ubiquitous language
 
[33rd] x driven-y niczego nie zmienią
[33rd] x driven-y niczego nie zmienią[33rd] x driven-y niczego nie zmienią
[33rd] x driven-y niczego nie zmienią
 
[4 developers] Jak zniszczyć swój kod - podstawy lingwistyki dla programistów
[4 developers] Jak zniszczyć swój kod - podstawy lingwistyki dla programistów[4 developers] Jak zniszczyć swój kod - podstawy lingwistyki dla programistów
[4 developers] Jak zniszczyć swój kod - podstawy lingwistyki dla programistów
 
Wzorce kreacyjne GoF
Wzorce kreacyjne GoFWzorce kreacyjne GoF
Wzorce kreacyjne GoF
 

xUnit - narzędzie do testowania

  • 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
  • 20. Katalog szkoleń Harmonogram szkoleń Zadaj pytanie BNS IT Al. Wyszyńskiego 22/17 94-042 Łódź E-mail: bnsit@bnsit.pl Tel.:+48 42 209 38 45 Fax.: +48 42 209 38 63 Zwiększanie efektywności programistów i zespołów programistycznych 20