testy jednostkowe
DESCRIPTION
Testy jednostkowe. Visual Studio NUnit. TDD - Test-driven development. Najpierw programista pisze automatyczny test sprawdzający dodawaną funkcjonalność. Test w tym momencie nie powinien się udać. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/1.jpg)
1
Testy jednostkoweVisual Studio
NUnit
![Page 2: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/2.jpg)
2
TDD - Test-driven development• Najpierw programista pisze automatyczny test
sprawdzający dodawaną funkcjonalność. Test w tym momencie nie powinien się udać.
• Później następuje implementacja funkcjonalności. W tym momencie wcześniej napisany test powinien się udać.
• W ostatnim kroku, programista dokonuje refaktoryzacji napisanego kodu, żeby spełniał on oczekiwane standardy.
![Page 3: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/3.jpg)
3
TDDGłównym celem test-driven jest:
• Zachowanie wysokiej jakości designu w
swoich klasach.
• Uniknięcie złej interpretacji wymagań
biznesowych.
• Zachowanie prostoty w kodzie: YAGNI +
KISS.
![Page 4: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/4.jpg)
4
Red-Green-Refactor• Red: Piszemy test, który się nie powodzi.
– Testy piszemy do pustych, ale istniejących już klas i metod (dzięki czemu możemy korzystać z IntelliSense).
– Uruchamiamy test i oczekujemy, że się nie powiedzie.• Green: Piszemy kod aby testy się powiodły.
– Implementujemy kod (według dokumentacji).– Uruchamiamy testy. Wszystkie testy muszą się powieść.
• Refactor: Refaktoryzacja kod—wprowadzenie zmian, które poprawiają jakość kodu (np. usunięcie duplikacji), ale nie zmieniają jego funkcjonalności.– Po refaktoryzacji, uruchamiamy wszystkie testy by sprawdzić czy
czegoś nie zepsuliśmy.– Ten punkt jest często lekceważony lub pomijany w procesie. Nie
zapominajmy o tym, równie ważnym co dwa poprzednie, elemencie
![Page 5: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/5.jpg)
5
Red-Green-Refactor
![Page 6: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/6.jpg)
6
Zalety TDD• Dokładne zrozumienie wymagań dokumentacji. Testy piszemy zawsze względem
dokumentacji.• Testy jako dokumentacja jest zawsze aktualna w czasie.• Testy nie wprowadzają niejednoznaczności, cechy którą może posiadać
dokumentacja papierowa.• Wymuszanie dobrego designu kodu i szybka identyfikacja potencjalnych błędów
w designie, np. problem z zależnościami.• Lepsza zarządzalność kodu w czasie.• Łatwiejsze i bezpieczniejsze łatanie kodu.• Natychmiastowy i automatyczny feedback na temat błędu w kodzie.• Testy regresyjne pozwalają stwierdzić czy po naszych zmianach nie zepsuliśmy
przy okazji czegoś w innej części systemu.• Krótszy, całkowity, czas procesu developmentu.• Dużo mniej ręcznego debugowania.
![Page 7: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/7.jpg)
7
Wady TDD• Czas i wysiłek na trening i przygotowanie developerów.• Potrzeba dyscypliny osobistej i zespołowej. Testy
muszą być zarządzane i poprawiane w czasie w taki sam sposób jak cała reszta kodu.
• Początkowa percepcja dłuższego czasu developmentu.• Nie wszyscy menadżerowie dają się przekonać. Biją
argumentem dwukrotnie dłuższego developmentu, choć całkowity czas trwania developmentu (wliczając szukanie i naprawę błędów, nie tylko pisanie kodu) w TDD jest krótszy niż w nie-TDD.
![Page 8: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/8.jpg)
8
Cztery główne rodzaje testów
w świecie TDD• testy jednostkowe (unit tests) — testujemy pojedynczą, jednostkową część kodu: zazwyczaj klasę lub metodę;
• testy integracyjne (integration tests) — testujemy kilka komponentów systemu jednocześnie;
• testy regresyjne (regression tests) — po wprowadzeniu naszej zmiany uruchamiane są wszystkie testy w danej domenie biznesowej celem sprawdzenia czy zmiana nie spowodowała błędu w innej części systemu;
• testy akceptacyjne (acceptance tests) — testy mające na celu odpowiedzieć na pytanie czy aplikacja spełnia wymagania biznesowe.
![Page 9: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/9.jpg)
9
Test jednostkowy a integracyjnyZagadnienie Test jednostkowy Test integracyjny
Zależności Testowany jednostkowy element (klasa, metoda) w izolacji.
Testowana więcej niż jedna wewnętrzna lub zewnętrzna zależność.
Punkt awarii (failure point)
Tylko jeden potencjalny punkt awarii (jedna logiczna asercja per test*).
Wiele potencjalnych punktów awarii.
Szybkość działania
Bardzo szybko, dużo poniżej 1 sekundy.
Może trwać długo, ze względu na czasochłonne operacje np. dostęp do bazy danych, I/O, operacje na sesji.
Konfiguracja Test musi działać na każdej maszynie bez dodatkowej konfiguracji.
Test może być zależny od konfiguracji, np. machine.config (login/hasło) do bazy danych.
![Page 10: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/10.jpg)
10
Test jednostkowy a integracyjny
![Page 11: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/11.jpg)
11
Test jednostkowy a integracyjny
![Page 12: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/12.jpg)
12
Test jednostkowy(ang. unit test) – w programowaniu metoda testowania tworzonego oprogramowania
poprzez wykonywanie testów weryfikujących poprawność działania pojedynczych
elementów (jednostek) programu – np. metod lub obiektów w programowaniu
obiektowym lub procedur w programowaniu proceduralnym. Testowany fragment
programu poddawany jest testowi, który wykonuje go i porównuje wynik (np.
zwrócone wartości, stan obiektu, wyrzucone wyjątki) z oczekiwanymi wynikami – tak
pozytywnymi, jak i negatywnymi (niepowodzenie działania kodu w określonych
sytuacjach również może podlegać testowaniu).
![Page 13: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/13.jpg)
13
Testy jednostkowe można podzielić na następujące
warianty:• analiza ścieżek
• użycie klas równoważności
• testowanie wartości brzegowych
• testowanie składniowe
![Page 14: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/14.jpg)
14
Analiza ścieżek• każda możliwa ścieżka w każdej funkcji została
przetestowana
• ścieżki są niemożliwe do sprawdzenia z powodu istnienia pętli
![Page 15: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/15.jpg)
15
Użycie klas równoważności• klasy poprawności – są to przypadki, dla
których przewidujemy poprawne wykonanie programu,
• klasy niepoprawności – są to przypadki, dla których przewidujemy błędne wykonanie programu.
![Page 16: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/16.jpg)
16
Użycie klas równoważnościPrzykłady:• rejestracja osoby w wieku od 0 do 120 lat:
przypadki testowe = {15, 18, 30, 60, 5}
• długość wiadomości od 1 do 50 znaków: przypadki testowe = {1, 2, 5, 8, 30, 45}
• napięcie od 0 do 100 V: przypadki testowe = {0, 1, 5, 24, 40, 80}
![Page 17: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/17.jpg)
17
Testowanie wartości brzegowychPrzykłady:• rejestracja osoby w przedziale wiekowym 0 – 120,testowane wartości brzegowe: {-1, 0, 1, 119, 120, 121}• długość wiadomości od 1 do 50 znaków:testowane wartości brzegowe: {0, 1, 2, 49, 50, 51}• napięcie od 0 do 100 V:testowane wartości brzegowe: {-1, 0, 1, 99, 100, 101}
![Page 18: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/18.jpg)
18
Testowanie składnioweBłędy zależne od systemu i środowiska:
• wymuszone wartości pól (bazy danych)
• autokorekty (MS Office)
![Page 19: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/19.jpg)
19
Testy jednostkowe – warto czy nie?• Testy jednostkowe pozwalają na duże zmiany
w kodzie w szybkim czasie. • TDD pomaga w rozsądnym programowaniu.• Testy i implementacja pozostają bardzo blisko
siebie, aby wynikowy kod był lepszej jakości.• TDD pomaga w programowaniu złożonych
problemów.• Testy jednostkowe umożliwiają lepsze
zrozumienie projektowanego kodu.
![Page 20: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/20.jpg)
20
Testy jednostkowe – warto czy nie?• Testy jednostkowe dają natychmiastowe wsparcie w
postaci wizualnej. • Wbrew powszechnej opinii pisanie testów wcale nie
wymaga dwukrotnie większej ilości kodu, ani nie zwalnia tempa tworzenia aplikacji.
• „Niedoskonałe testy, uruchamiane często są o wiele lepsze niż doskonałe testy, których nigdy nie napiszesz”.
• Dobre testy jednostkowe ułatwiają dokumentowanie kodu i dokładniejsze określenie, jak dany fragment rzeczywiście działa.
• Test jednostkowe pomagają w ponownym użyciu kodu.
![Page 21: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/21.jpg)
21
Typy asercji• asercje porównań
– assertEquals([komunikat], oczekiwany, faktyczny)• asercje tożsamości
– assertSame([komunikat], oczekiwany, faktyczny)– assertNotSame([komunikat], oczekiwany, faktyczny)
• asercje referencji null– assertNull([komunikat], referencja)– assertNotNull([komunikat], referencja)
• asercje logiczne– assertTrue([komunikat], warunek)– assertFalse([komunikat], warunek)
• bezwarunkowe niepowodzenie– fail([komunikat])
![Page 22: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/22.jpg)
22
Atrybuty Visual Studio• [AssemblyCleanup] – atrybut dla metody porządkującej. Metoda zostanie
uruchomiona po wykonaniu wszystkich innych testów.• [AssemblyInitialize] – atrybut metody przygotowawczej. Metoda z takim atrybutem
zostanie wykonana jako pierwsza. Może posłużyć do przygotowania np. zasobów dla testów.
• [DataSource] – udostępnia informacje o połączeniu ze źródłem danych.• [DeploymentItem] – pozwala wskazać dodatkowe pliki (.dll, .txt i innych), niezbędne
do przeprowadzenia testu.• [ExpectedException] – wskazuje metodę testową, której wartością oczekiwaną jest
zwrócenie wyjątku.• [HostType] – atrybut przydatny np. w testach dla ASP.NET kiedy to nie lokalny
komputer jest hostem. HostType pozwala wskazać innego hosta.• [Ignore] – oznaczoną tak metodę należy pominąć• [TestClass] – atrybut do oznaczania klas, które zawierają metody testów.• [TestProperty] – pozwala definiować właściwości metod testowych.• [TestMethod] – oznacza metodę jako test jednostkowy.• [Timeout] – określa limit czasu (w milisekundach) dla danej metody testowej.
![Page 23: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/23.jpg)
23
Atrybuty NUnit• [TestFixture]– wskazuje na klasę zawierającą testy• [Test] wskazuje metodę będącą• [Igonre]– ignorowanie testu• [TestFixtureSetUp]– oznaczenie metodywywoływanej przed testami• [TestFixtureTearDown]– oznaczenie metody wywołanej po zakończeniu testów wywołanej po zakończeniu testów• [Category]– oznaczenie przynależności klasy testowej do danej kategorii• [Explicite]–ignorowanie testu w przypadkuuruchomiania wszystkich testów naraz
![Page 24: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/24.jpg)
24
Pytania na kolokwium• Czym jest test jednostkowy?
• Czym jest TDD? Podaj główne kroki TDD.
• Wymień 4 rodzaje testów w świecie TDD.
![Page 25: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/25.jpg)
25
Bibliografiahttp://pl.wikipedia.org/wiki/Test_jednostkowy
http://msdn.microsoft.com/pl-pl/library/testy-jednostkowe-w-
visual-studio.aspx
http://adamczuk.net.pl/2013/01/14/testy-jednostkowe-warto-
czy-nie-warto/
http://wazniak.mimuw.edu.pl/images/e/e9/Zpo-3-wyk.pdf
http://icis.pcz.pl/~dsmorawa/zal/testyjednostkowe.pdf
http://michalaniserowicz.wordpress.com/tag/nunit/
http://
premium-hands.blogspot.com/2011/11/normal-0-21-false-f
alse-false-pl-x-none.html
![Page 26: Testy jednostkowe](https://reader033.vdocuments.site/reader033/viewer/2022061420/5681622e550346895dd25c73/html5/thumbnails/26.jpg)
26
Dziękuję za uwagę!