JUnit TESTY JEDNOSTKOWE. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Podobne dokumenty
Platformy Technologiczne

METODY PROGRAMOWANIA

Programowanie zespołowe

Wprowadzenie do testów jednostkowych. Marcin Dziedzic, Wiktor Żołnowski

Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)

TESTOWANIE OPROGRAMOWANIA

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

Testowanie II. Cel zajęć. Pokrycie kodu

Testowanie. Ryszard Beczek & Piotr Miłkowski 1 04/11/07

Budowa aplikacji webowej w oparciu o Maven2 oraz przykłady testów jednostkowych. Wykonał Marcin Gadamer

Testowanie I. Celem zajęć jest zapoznanie studentów z podstawami testowania ze szczególnym uwzględnieniem testowania jednostkowego.

Program szkolenia: Test Driven Development (TDD) using Spock or JUnit 5

Programowanie poprzez testy z wykorzystaniem JUnit

Całościowe podejście do testowania automatycznego dla programistów. /C#/PHP (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Michał Olejnik. 22 grudnia 2009

Programowanie kontraktowe w Javie

Automatyczne testowanie aplikacji Android

Testy automatyczne. Korzystające z junit

Techniki efektywnego testowania kodu dla programistów Java (Spock

Wskazówki projektowe. Programowanie Obiektowe Mateusz Cicheński

LABARATORIUM 9 TESTY JEDNOSTKOWE JUNIT 3.8

Wprowadzenie do Behaviordriven

Maciej Oleksy Zenon Matuszyk

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

BUDOWANIE APLIKACJI. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).

Testowanie aplikacji JAVA Laboratorium 8 (Tabele w scenariuszach JBehave. Projekt z podstaw BDD oraz atrap.)

WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java

Programowanie komponentowe 5

Konwerter Plan testów. Jakub Rauch Tomasz Gołębiowski Adam Busch Bartosz Franaszek 1 czerwca 2008

Program szkolenia: Wzorce projektowe i ich implementacja w C# oraz testowanie automatyczne

REFERAT PRACY DYPLOMOWEJ

Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36

Weryfikacja i walidacja. Metody testowania systemów informatycznych

Ciągłe dostarczanie oprogramowania : kompletny przewodnik / Eberhard Wolff. Gliwice, cop Spis treści

Korporacyjna Magistrala Usług na przykładzie Mule ESB

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie w Ruby

Zastosowanie komponentów EJB typu Session

Wykład VII. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

JUNIT. Terminologia. Organizacja testów

Inżynieria Programowania - Testowanie oprogramowania cz.2

Testowanie jednostkowe. Jacek Starzyński, ZETiIS PW

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Program szkolenia: Continuous Integration i Git

Katalog książek cz. 3: Web Service

Zapytanie ofertowe

Spring Framework - wprowadzenie i zagadnienia zaawansowane

Testowanie aplikacji. Kurs języka Ruby

Porównanie metod i technik testowania oprogramowania. Damian Ryś Maja Wojnarowska

Cuchnące testy Systematyka, objawy, leczenie. Bartosz Walter

INŻYNIERIA OPROGRAMOWANIA TESTOWANIE INTEGRACYJNE

Acceptance Test Driven Development wspierane przez narzędzie ROBOT Framework. Edyta Tomalik Grzegorz Ziemiecki

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Program szkolenia: Receptury testowania automatycznego - problemy, strategie, taktyki, techniki, narzędzia

Podstawy programowania III WYKŁAD 6

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

AUREA BPM HP Software. TECNA Sp. z o.o. Strona 1 z 7

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

Architektura mikroserwisów na platformie Spring IO

Overlord - Plan testów

Testowanie aplikacji Java Servlets

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

JAVA EE MODEL APLIKACJI. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

INŻYNIERIA OROGRAMOWANIA TESTOWANIE JEDNOSTKOWE 2015/2016

Testowanie mutacyjne

szkolenia pod drzewem Wybrane Techniki XP bnd 2008 Tomasz Włodarek. Materiał udostępniany na podstawie licencji Creative Commons (by-nc-nd) 1.00.

JAVA NA SERWERZE SPRING. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Automatyzacja procesu testowego

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Testowanie Testy jednostkowe

Projektowanie obiektowe oprogramowania Testowanie oprogramowania Wykład 13 Wiktor Zychla 2014

Podstawy i języki programowania

Programowanie Komponentowe WebAPI

Pico. Wstęp do kontenerów IoC.

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Tworzenie i wykorzystanie usług sieciowych

Automatyzacja testów aplikacji webowych w Selenium podstawy. Natalia Krawczyk

Aplikacje w środowisku Java

System Kontroli Bazy Danych Topograficznych (SKBDT) zawód kartografa?

Programowanie obiektowe

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Automaty do zadań specjalnych. Olga Maciaszek-Sharma, Artur Kotow Wersja 1,

Załącznik 1 instrukcje instalacji

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Języki i metody programowania Java. Wykład 2 (część 2)

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Dlaczego testowanie jest ważne?

learningpanel - logowanie

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Wtyczka Crop3D. Wstęp. Implementacja. Sprawozdanie z realizacji projektu Bartłomiej Trzewiczek Kraków,

Wzorce projektowe. dr inż. Marcin Pietroo

MVVM Light Toolkit. Julita Borkowska

Transkrypt:

JUnit TESTY JEDNOSTKOWE Waldemar Korłub Platformy Technologiczne KASK ETI Politechnika Gdańska

Testy aplikacji 2 Ręczne testowanie Czasochłonne Powtarzalność trudna do uzyskania Nudne Testowanie automatyczne Szybsze Powtarzalne Nie wymaga ciągłej uwagi ze strony dewelopera Ułatwia kontrolowanie regresji n Po wykonaniu zmian/refaktoryzacji uruchamiamy testy

Testy aplikacji 3 Testować można na wielu poziomach Testy jednostkowe Testy integracyjne Testy funkcjonalne/akceptacyjne Testy interfejsu użytkownika

Testy jednostkowe 4 Testowanie komponentów aplikacji w separacji od ich zależności np. odseparowanie od bazy danych, innych komponentów aplikacji Testy dokumentują oczekiwane zachowanie komponentu To że każdy komponent z osobna działa poprawnie, nie oznacza, że aplikacja jako całość jest poprawna Stąd inne poziomy testowania (poprzedni slajd)

Co testować 5 Poprawne przebiegi Prawidłowe zachowanie dla poprawnych danych wejściowych Przypadki graniczne Krańce przedziałów dozwolonych wartości, min, max Sytuacje wyjątkowe Czy komponent reaguje prawidłowo na błędne dane?

JUnit 6 Podstawowe narzędzie w rękach każdego dewelopera Javy W projekcie budowanym Mavenem: src/test/java Integracja we wszystkich popularnych IDE Testy implementowane jako klasy z odpowiednimi adnotacjami

Wzorzec Arrange-Act-Assert 7 Wzorzec Arrange-Act-Assert określa strukturę testu: Arrange przygotowanie danych wejściowych i wszystkich wymaganych obiektów Act wykonanie operacji na testowanym obiekcie Assert weryfikacja czy uzyskane rezultaty są zgodne z oczekiwaniami Jasno rozdziela testowaną funkcjonalność od kodu inicjującego i weryfikującego

Przykład (niezbyt przydatnego) testu 8 public class OrdersServiceTest { @Test public void whengivenlowercasestring_toupperreturnsuppercase() { //Arrange String lower = "abcdef"; } } //Act String result = lower.touppercase(); //Assert Assert.assertEquals("ABCDEF", result);

Asercje 9 org.junit.assert assertequals assertarrayequals assertnotsame assertfalse/asserttrue assertnotnull assertthat(t actual, Matcher<T> matcher)

Matcher 10 org.hamcrest.corematchers assertthat(arrays.aslist("one", "two", "three"), hasitems("one", "three")); assertthat(arrays.aslist(new String[]{"fun","ban","ne"}), everyitem(containsstring("n"))); assertthat("good", anyof(equalto("bad"), equalto("good"))); assertthat("album", both(containsstring("a")).and(containsstring("b")));

Mocki (zaślepki) 11 Jak przetestować komponent, który używa obiektu klasy EntityManager? Do testów jednostkowych nie używamy bazy danych Wydłużenie czasu testu Taki test może się nie powieść ze względu na błąd po stronie bazy danych, a nie w testowanym komponencie Mocki to specjalnie zbudowane obiekty-zaślepki, które zachowują się w z góry określony sposób W projekcie Spring Boot domyślnie dostępna jest biblioteka Mockito

@RunWith(MockitoJUnitRunner.class) public class OrdersServiceTest { 12 @Mock EntityManager em; @Test public void whenorderedbookavailable_placeorderdecreasesamountbyone() { //Arrange Order order = new Order(); Book book = new Book(); book.setamount(1); order.getbooks().add(book); Mockito.when(em.find(Book.class, book.getid())).thenreturn(book); OrdersService ordersservice = new OrdersService(em); //Act ordersservice.placeorder(order); //Assert assertequals(0, (int)book.getamount()); } } Mock dla EntityManagera

13 @Test(expected = OutOfStockException.class) public void whenorderedbooknotavailable_placeorderthrowsoutofstockex() { } //Arrange Order order = new Order(); Book book = new Book(); book.setamount(0); order.getbooks().add(book); Mockito.when(em.find(Book.class, book.getid())).thenreturn(book); OrdersService ordersservice = new OrdersService(em); //Act ordersservice.placeorder(order); //Assert spodziewany wyjątek Testowanie sytuacji wyjątkowej

TDD: Test Driven Development 14 Pracę nad nowym komponentem/funkcjonalnością zaczynamy od napisania testów Testy opisują oczekiwane zachowanie komponentu Pisząc testy zastanawiamy się jak komponent będzie używany (np. przez innych deweloperów) Pierwsze uruchomienie testów wszystkie kończą się niepowodzeniem Bo jeszcze nie mamy żadnej funkcjonalności! Implementujemy komponent tak, aby kolejne testy kończyły się sukcesem Gdy wszystkie testy przechodzą pomyślnie, implementacja komponentu jest zakończona

Testowanie 15 Testy aplikacji mogą ujawnić występujące w niej błędy, nie mogą wykazać, że błędów nie ma! --Edsger Dijkstra

16 Pytania?