Programowanie poprzez testy z wykorzystaniem JUnit

Podobne dokumenty
Testowanie oprogramowania. Marian Jureczko

Testowanie oprogramowania cz. 2. Marian Jureczko

Testowanie jednostkowe. Jacek Starzyński, ZETiIS PW

METODY PROGRAMOWANIA

LABARATORIUM 9 TESTY JEDNOSTKOWE JUNIT 3.8

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

TESTOWANIE OPROGRAMOWANIA

Testowanie aplikacji Java Servlets

Testowanie II. Cel zajęć. Pokrycie kodu

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

Testy automatyczne. Korzystające z junit

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

Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe

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

Wykład 7: Pakiety i Interfejsy

Wywoływanie metod zdalnych

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

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

JUnit. Pragmatyczne testy jednostkowe w Javie

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

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Programowanie Obiektowe Ćwiczenie 4

Remote Method Invocation 17 listopada 2010

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Testowanie i logowanie. 1. Testowanie aplikacji JUnit. 2. Tworzenie logów: pakiet java.util.logging.

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Języki i metody programowania Java INF302W Wykład 3 (część 1)

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

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

Podejście obiektowe do budowy systemów rozproszonych

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Programowanie obiektowe

Java: interfejsy i klasy wewnętrzne

Dziedziczenie. dr Jarosław Skaruz

PISANIE TESTÓW Z WYKORZYSTANIEM BIBLIOTEKI TESTNG

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Wywoływanie metod zdalnych

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Aplikacje w środowisku Java

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Wzorce prezentacji internetowych

Podstawy i języki programowania

Wykład 8: Obsługa Wyjątków

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

Programowanie obiektowe

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

1 Atrybuty i metody klasowe

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

KLASY, INTERFEJSY, ITP

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Programowanie obiektowe

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

prepared by: Programowanie WWW Servlety

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Aplikacje RMI

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Systemy Rozproszone - Ćwiczenie 6

Podstawy programowania obiektowego

Polimorfizm. dr Jarosław Skaruz

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

JUNIT. Terminologia. Organizacja testów

Technologie i usługi internetowe cz. 2

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Dawid Gierszewski Adam Hanasko

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Dokumentacja do API Javy.

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

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

Podstawy programowania III WYKŁAD 6

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Metody Metody, parametry, zwracanie wartości

Weryfikacja i walidacja. Metody testowania systemów informatycznych

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

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

Wzorce logiki dziedziny

Aplikacje w środowisku Java

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Współbieżność w środowisku Java

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Zagadnienia. Inżynieria Oprogramowania

Języki i metody programowania Java Lab2 podejście obiektowe

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

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

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

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

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

Programowanie obiektowe

Transkrypt:

Programowanie poprzez testy z wykorzystaniem JUnit

Programowanie ekstremalne (XP) XP zaproponowano w 1999 (K. Beck: Extreme Programming Explained ) XP dedykowane jest do projektów: O małym lub średnim rozmiarze O wysokim poziomie ryzyka

XP podstawowe zasady Iteracyjność Sukcesywne projektowanie Dynamiczna architektura Programowanie parami Stały kontakt z klientem Dobra komunikacja w zespole Programowanie poprzez testy

Programowanie poprzez testy Testy akceptacyjne Tworzone dla PU. Wykonywane przez testera. Testy jednostkowe Tworzone dla klas. Wykonywane przez programistę.

Programowanie poprzez testy Implementacja testów Implementacja programu Testowanie

JUnit Twórcy: K.Beck, E.Gamma http://junit.org Wsparcie dla wielu języków: SUnit (Smalltalk) NUnit (C#) PyUnit (Python) CPPUnit (C++) funit (Fortran) JSUnit (JavaScript)

Najprostsze testy public class Largest{ public static int largest( int[] list ){ int i, max=integer.max_value; for( i=0; i<list.length-1; i++ ){ if( list[i]>max ) { max = list[i]; return max;

Najprostsze testy import junit.framework.*; public class TestLargest extends TestCase{ public TestLargest(String name) { super(name); public void testorder() { assertequals(9,largest.largest(new int[] {8,9,7));

Najprostsze testy There was 1 failure: 1)testOrder(TestLargest)junit.framework.Assert ionfailed Error: expected<9> but was:<2147483647> at TestLargest.testOrder(TestLargest.java:7)

Najprostsze testy public class Largest{ public static int largest( int[] list ){ int i, max=integer.max_value;//max=0 for( i=0; i<list.length-1; i++ ){ if( list[i]>max ) { max = list[i]; return max;

Najprostsze testy public void testorder() { assertequals(9,largest.largest(new int[] {9,8,7)); assertequals(9,largest.largest(new int[] {8,9,7)); assertequals(9,largest.largest(new int[] {7,8,9));

Najprostsze testy There was 1 failure: 1)testOrder(TestLargest)junit.framework.Assert ionfailed Error: expected<9> but was:<8> at TestLargest.testOrder(TestLargest.java:9)

Najprostsze testy public class Largest{ public static int largest( int[] list ){ int i, max=0; for( i=0; i<list.length-1; i++ ){ //i<list.length if( list[i]>max ) { max = list[i]; return max;

Najprostsze testy public void testorder() { assertequals(9, Largest.largest(new int[] {9,8,9,7)); assertequals(1, Largest.largest(new int[] {1)); assertequals(-7, Largest.largest(new int[] {-7,-8,-9));

Najprostsze testy There was 1 failure: 1)testOrder(TestLargest)junit.framework.Assert ionfailed Error: expected<-7> but was:<0> at TestLargest.testOrder(TestLargest.java:12)

Najprostsze testy public class Largest{ public static int largest( int[] list ){ int i, max=0; //max=integer.min_value for( i=0; i<list.length; i++ ){ if( list[i]>max ) { max = list[i]; return max;

Wykonywanie testów (konsola) Kompilacja programu i testów: javac Largest.java TestLargest.java Uruchomienie testów: java junit.textui.testrunner TestLargest

Wykonywanie testów (NetBeans) Tworzenie nowego testu

Wykonywanie testów (NetBeans) Parametry nowego testu

Wykonywanie testów (NetBeans) Uruchamianie testów

Struktura testów jednostkowych Dziedziczenie po klasie TestCase Adnotacja @Test @Test public void method() {... Konwencja nazewnictwa public void testmethod() {...

Asercje JUnit assertequals([message], expected, actual) assertequals([message], expected, actual, tolerance) assertnull([message], Object object) assertnotnull([message], Object object) assertsame([message], expected, actual) asserttrue([message], condition) fail([message])

Konfiguracja testu public class TestDB extends TestCase{ private Connection dbconn; protected void setup() { dbcon = new Connection(...); dbconn.connect(); protected void teardown() { dbconn.disconnect(); public void test1() {... public void test2() {...

Wyjątki public void testexception() { try{ sortmylist(null); fail( Metoda powinna wygenerować wyjątek ); catch (RuntimeException e) { asserttrue(true);

Co testować? Czy wyniki są poprawne? Czy warunki brzegowe zostały prawidłowo określone? Czy można sprawdzić relacje zachodzące w odwrotnym kierunku? Czy można sprawdzić wyniki w alternatywny sposób? Czy można wymusić błędy? Czy efektywność jest zadowalająca?

Efektywność public void testsym() { long start,end; Symulator s=new Symulator(); start=calendar.getinstance().gettimeinmilli s(); s.sym(); end=calendar.getinstance().gettimeinmillis( ); asserttrue( end-start < 1000 );

Obiekty imitacji Obiekty imitacji zastępują rzeczywisty obiekt na czas uruchamiania i testowania kodu. Zastosowania: Obiekt rz. zachowuje się niedeterministycznie Obiekt rz. jest trudny do skonfigurowania Trudno jest wywołać interesujące nas zachowanie obiektu (np. błąd sieci) Obiekt rz. działa powoli Obiekt rz. ma interfejs użytkownika Obiekt rz. Jeszcze nie istnieje

Obiekty imitacji (mockobjects) testowanie sevletu public void doget(httpservletrequest req, HttpServletResponse res) { String s = req.getparameter( cal ); res.setcontenttype( text/html ); PrintWriter out = res.getwriter(); double cal = Double.parseDouble(s); double joule = 4.1868*cal; out.println( String.valueOf(joule) );

Obiekty imitacji (mockobjects) testowanie sevletu import junit.framework.*; import com.mockobjects.servlet.*; public class TestServlet extends TestCase { public void test1(){ Cal2JServlet s = new Cal2JServlet(); MockHttpServletRequest req = new MockHttpServletRequest(); MockHttpServletResponse res = new MockHttpServletResponse();

Obiekty imitacji (mockobjects) testowanie sevletu req.setupaddparameter( cal, 1 ); res.setexpectedcontenttype( text/html ); s.doget( req, res ); double j = Double.parseDouble(res. getoutputgetoutputstreamcontents()); assertequals( 4.1868, j, 0.01 );

Obiekty imitacji Easy Mock Tryb nagrywania Wołamy wymagane metody Konfigurujemy zwracane wartości Tryb odtwarzania Można wołać nagrane wcześniej metody Otrzymuje się skonfigurowane wcześniej wartości

Cechy poprawnych testów jednostkowych Automatyzacja uruchamianie testów musi być łatwe. Kompletność należy testować wszystko co może zawieść. Powtarzalność wielokrotne wykonanie testu daje te same wyniki. Niezależność od środowiska i innych testów. Profesjonalizm kod testujący jest tak samo ważny jak kod dostarczany klientowi.

Log4j Zalety Łatwa i szybka implementacja. Możliwość testowania w dowolnym miejscu kodu. Przyspiesza (zastępuje) debugowanie. Wady Kod logowania wymieszany z kodem dostarczanym klientowi.

Log4j import org.apache.log4j.*... BasicConfigurator.configure(); Logger log=logger.getlogger( name ); log.setlevel( Level.WARN ); log.debug(... ); log.info(... ); log.warn(... ); log.error(... ); log.fatal(... );

Dziękuję za uwagę