Testy jednostkowe Visual Studio NUnit.

Slides:



Advertisements
Podobne prezentacje
I część 1.
Advertisements

Agile w praktyce, czyli jak to robimy naprawdę
Wprowadzenie do narzędzi CAT
Zarządzanie konfiguracją oprogramowania
Diagramy stanów i diagramy aktywności
Wzorce.
Bezpieczeństwo wyjątków w C++: OpenGL
Bezpieczeństwo aplikacji WWW
PROGRAMOWANIE STRUKTURALNE
SCR 2008/2009 – informatyka rok 5. Edytor Wizualny - Agenda Przeznaczenie komponentu Funkcjonalność Opis działania.
Wydział Zastosowań Informatyki i Matematyki SGGW
ASP.NET 2.0 AJAX Extensions 1.0
Projektowanie Aplikacji Komputerowych
Projektowanie Aplikacji Komputerowych
Arkadiusz Twardoń ZTiPSK
Organizacja Przedsięwzięć Programistycznych Testowanie
Zarządzanie konfiguracją Doskonalenie Procesów Programowych Wykład 6 Copyright, 2001 © Jerzy.
Czyli jak testować w Eclipsie?
Podstawy informatyki Rekurencja i rekurencja Grupa: 1A
„Migracja środowisk Novell NDS/eDirectory oraz Novell Groupwise do środowiska Microsoft Active Directory oraz Microsoft Exchange przy użyciu narzędzi Quest.
Programowanie obiektowe Andrzej Ziółkowski Wykład 7.
Systemy zarządzania treścią CMS
Projektowanie i programowanie obiektowe II - Wykład IV
SZPIF – Harmonogram, Opis narzędzi, Schemat bazy danych
© Victo Testowanie dla menedżerów Wersja TDM Slajd 1 (27) Testowanie oprogramowania dla menedżerów Co menedżerowie i kierownicy naprawdę potrzebują
Wykonawcy:Magdalena Bęczkowska Łukasz Maliszewski Piotr Kwiatek Piotr Litwiniuk Paweł Głębocki.
Podstawy programowania II
Rozwój aplikacji przy wykorzystaniu ASP.NET
Continuous Integration
Instrukcja USOS Rejestracja na zajęcia obieralne wersja by Marek Opacki.
Prezentacja funkcjonalności dziennika e-klasa
Budowanie tabel i relacji
Prezentacja i szkolenie
Refaktoryzacja Robert Pająk.
Podstawy działania wybranych usług sieciowych
Komponentowe systemy rozproszone Wprowadzenie. Komponent... jest to podstawowa jednostka oprogramowania z kontraktowo (deklaratywnie) opisanymi interfejsami,
Maszyna wirtualna ang. virtual machine, VM.
ADRES IP – unikatowy numer przyporządkowany urządzeniom sieci komputerowych. Adres IPv4 składa się z 32 bitów podzielonych na 4 oktety po 8 bitów każdy.
Rational Unified Process Implementacja Aleksandra Reiman, gr. I-52.
Operacje edycyjne w bazie danych - kwerendy funkcjonalne Marzena Nowakowska Katedra Informatyki Stosowanej, WZiMK, PŚk.
MICROSOFT Access TWORZENIE MAKR
Dr Karolina Muszyńska Na podst.:
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
ZASADY EFEKTYWNEGO PISANIA TESTÓW

Dziennik.
Metodyki wytwarzania i utrzymywania aplikacji
Podstawy programowania
UML W V ISUAL S TUDIO Mateusz Lamparski. UML D EFINICJA Unified Modeling Language (UML) to graficzny język do obrazowania, specyfikowania, tworzenia i.
Zaawansowane techniki obiektowe
Bazy i Systemy Bankowe Sp. z o.o. ul. Kasprzaka 3, 85 – 321 Bydgoszcz
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
ŁUKASZ DZWONKOWSKI Modele zwinne i ekstremalne. Podejście tradycyjne
Proces tworzenia oprogramowania Proces tworzenia oprogramowania jest zbiorem czynności i związanych z nimi wyników, które prowadzą do powstania produktu.
Projektowanie Aplikacji Internetowych Artur Niewiarowski Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska.
Projektowanie obiektowe. Przykład: Punktem wyjścia w obiektowym tworzeniu systemu informacyjnego jest zawsze pewien model biznesowy. Przykład: Diagram.
.NET i Bazy Danych Projekt: Wadim Grasza.
Platforma .Net.
Programowanie Zaawansowane
Pętle – instrukcje powtórzeń
Temat: Porównanie technologii php,c# oraz javascript na przykładzie webaplikacji typu społecznościowy agregator treści Autor: Wojciech Ślawski.
T ESTY JEDNOSTKOWE W C# Alicja Majka, A GENDA Wprowadzenie do środowiska Czym są testy jednostkowe i po co je stosować? XUnit, NUnit Pokrycie.
Architektura Rafał Hryniów. Architektura Wizja projektu systemu, którą dzielą twórcy Struktura komponentów systemu, ich powiązań oraz zasad i reguł określających.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
 sprawdzają funkcjonalność i poprawność kodu, który napisał programista  sprawdzanie odbywa się poprzez użycie składowych klas dla różnych danych 
Testy jednostkowe. „Test jednostkowy (unit test) to fragment kodu, który sprawdza inny fragment kodu”
Od (web)aplikacji biznesowych po (web)game dev Testowanie i spełnianie oczekiwań.
Programowanie Obiektowe – Wykład 2
Zapis prezentacji:

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

TDD Głó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.

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

Red-Green-Refactor

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.

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.

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.

Test jednostkowy a integracyjny Zagadnienie 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.

Test jednostkowy a integracyjny

Test jednostkowy a integracyjny

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

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

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

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.

Użycie klas równoważności Przykł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}

Testowanie wartości brzegowych Przykł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}

Testowanie składniowe Błędy zależne od systemu i środowiska: wymuszone wartości pól (bazy danych) autokorekty (MS Office)

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.

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.

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

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.

Atrybuty NUnit [TestFixture]– wskazuje na klasę zawierającą testy [Test] wskazuje metodę będącą [Igonre]– ignorowanie testu [TestFixtureSetUp]– oznaczenie metody wywoł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 przypadku uruchomiania wszystkich testów naraz

Pytania na kolokwium Czym jest test jednostkowy? Czym jest TDD? Podaj główne kroki TDD. Wymień 4 rodzaje testów w świecie TDD.

Bibliografia http://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-false-false-pl-x-none.html

Dziękuję za uwagę!