JAVA Unit testing Java, zimní semestr

Podobné dokumenty
JAVA Unit testing Java, zimní semestr

JAVA V Hibernate Java, letní semestr

Aplikace s grafickým uživatelským rozhraním

JAVA GUI Java, zimní semestr

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

JAVA. Java Management Extensions JMX

Projekty pro výuku programování v jazyce Java

GUI. Systémová integrace pro desktopové aplikace

GUI v Javě. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 5 B0B36PJV Programování v JAVA

GUI v Javě. GUI v Javě GUI komponenty a kontejnery Dialogová okna Události a obsluha událostí z GUI

GUI v Javě a událostmi řízené programování

Základy programovaní 3 - Java. Unit testy. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 26.,27.

GUI v Javě. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 5 B0B36PJV Programování v JAVA

Testovací metoda. Testovací metoda. public class SimpleTest {

JAVA V GUI Java, zimní semestr

Java GUI události. Událostmi řízené programování. Zpracování = obsluha událostí

GUI v Javě (připomínka) Návrhář GUI Příklad aplikace MVC Model-View-Controller Události Vnitřní třídy. MVC Model-View-Controller

GUI v Javě a událostmi řízené programování

Michal Podzimek

GUI v Javě a událostmi řízené programování

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

Java - výjimky. private void vstup() throws IOException {... }

Část I Příklad - Generické typy, iterátor

JAVA. GUI v std knihovně. Java, letní semestr

JAVA UI. Programování uživatelských rozhraní v Javě. Java UI, letní semestr 2017/2018 1

Pokročilé programování na platformě Java. Úvod

GUI v Javě. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 3 A0B36PR2 Programování 2

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

Část I Příklad - Generické typy, iterátor

JAVA JavaBeans Java, letní semestr

KIV/PIA 2013 Jan Tichava

JAVA V GUI Java, zimní semestr

GUI v Javě. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 3 A0B36PR2 Programování 2

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Java a Caché IV: Manipulace s objekty

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

GUI - úvod. V této kapitole si ukážeme návod, jak vytvořit jednoduchou grafickou aplikaci a umístit do ní některé další grafické prvky.

Reaktivní programování v.net

Úvod do programovacích jazyků (Java)

Vláknové programování část V

Principy objektově orientovaného programování

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

7 Jazyk UML (Unified Modeling Language)

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Události. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Anotace Test. Označuje public void metodu, která může být spuštěna jako test. Parametr expected označuje vyjimku, která by měla být v metodě vyvolána

RMI Remote Method Invocation

Vývoj aplikací řízený testy. Miroslav Beneš

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

Obsah přednášky. Vývoj aplikací řízený testy. Extrémní programování (XP) Požadavky na nástroje pro XP. Testování aplikací

Technology Entry form Entry up-to-date? Internal links Faulty internal Possible internal links

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

IRAE 07/08 Přednáška č. 7. Začátek (head)

Komponenty v.net. Obsah přednášky

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

SWT & MigLayout. Alternativy Java GUI v praxi. Pavel Janečka & Tomáš Chlouba. červen 2011

1. Programování proti rozhraní

VIII. Seminář Java VIII p.1/36

GUI. JavaFX. Java UI, letní semestr 2017/2018 1

7 Jazyk UML (Unified Modeling Language)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Návrh softwarových systém. Návrh softwarových systémů

Java - Kresba. 2/28/11 1/8 Java - kresba

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Code Contracts. Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz

Technologie JavaBeans

Generické programování

Klíčová slova: OOP, konstruktor, destruktor, třída, objekt, atribut, metoda

Změna vlastností kódem

JAVA JavaBeans Java, letní semestr 2018

Iterator & for cyklus

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Algoritmizace a programování

UJO Framework. revoluční architektura beans. verze

Java Enum Java, zimní semestr ,2017 1

9. Ladění a testování programů. booleovský výraz

Programování v Javě I. Únor 2009

Nástroje a frameworky pro automatizovaný vývoj. Jaroslav Žáček jaroslav.zacek@osu.cz

Spring framework 2.0. Roman Pichlík CZJUG

Java a XML. 10/26/09 1/7 Java a XML

Obrázek 6.14: Prohlížec nápovedy

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)

Programování v Javě I. Leden 2008

Testování software. Jaroslav Žáček

Tvorba informačních systémů

Abstraktní datové typy: zásobník

Java [džava] nebo [džáva] v americkém slangu "kafe" Sun Microsystems nyní Oracle

Technologie Java. Jaroslav Žáček

Semin aˇr Java N astroje Radek Koˇc ı Fakulta informaˇcn ıch technologi ı VUT Bˇrezen 2012 Radek Koˇc ı Semin aˇr Java n astroje 1/ 42

Anywhere - IT-break. Milan Lempera UnitTest.cz

Transkript:

JAVA Unit testing

Úvod unit testing testování malý jednotek funkčnosti jednotka nezávislá na ostatních testování zcela oddělené vytvářejí se pomocné objekty pro testování kontext typicky v OO jazycích jednotka ~ metoda ideálně unit testy pro všechny jednotky v programu typicky v OO jazycích pro všechny public metody

Test-driven development začít s testy Zdroj: https://commons.wikimedia.org/wiki/file:tdd_global_lifecycle.png#/media/file:tdd_global_lifecycle.png

JUnit podpora pro unit testing v Javě http://www.junit.org/ používání založeno na anotacích starší verze založeny na dědičnosti a jmenných konvencích mírně odlišné použití u různých verzí 5, 4, 3

Používání testovací metody označeny anotací @Test JUnit se spustí na množinu tříd najde v nich metody označené @Test ty provede další anotace @BeforeEach (@Before) metoda prováděná před každým testem určeno pro přípravu prostředí @AfterEach (@After) metoda provádění po každém testu určeno pro úklid @BeforeAll (@BeforeClass) metoda prováděná před všemi testy na dané třídě @AfterAll (@AfterClass) metoda prováděná po všech testech na dané třídě

Příklad public class SimpleTest { private Collection collection; @BeforeAll public static void onetimesetup() { // one-time initialization code @AfterAll public static void onetimeteardown() { // one-time cleanup code @BeforeEach public void setup() { collection = new ArrayList(); @AfterEach public void teardown() { collection.clear(); @Test public void testemptycollection() { asserttrue(collection.isempty()); @Test public void testoneitemcollection() { collection.add("itema"); assertequals(1, collection.size());

Assert asserttrue assertfalse assertequals assert... statické metody na org.junit.jupiter.api.assertions (org.junit.assert) ověřování podmínek v testech test selže pokud assert... selže assert...() vyhodí AssertionError obecně test je splněn, pokud metoda skončí normálně test není splněn, pokud metoda vyhodí výjimku

Testování výjimek jak otestovat správné vyhazování výjimek? assertthrows(indexoutofboundsexception.class, () -> { new ArrayList<Object>().get(0); ); ve starších verzích @Test(expected= IndexOutOfBoundsException.class) public void empty() { new ArrayList<Object>().get(0);

Spouštění testů z kódu org.junit.runner.junitcore.runclasses(testclass1.class,...); z příkazové řádky java -jar junit.jar select-class TestClass1 z Antu task junit <junit printsummary="yes" fork="yes" haltonfailure="yes"> <formatter type="plain"/> <test name="my.test.testcase"/> </junit> z Mavenu mvn test z IDE

TestNG http://testng.org/ inspirováno JUnit frameworkem mírně jiné vlastnosti původně dnes skoro stejné základní použití je stejné

Java Reactive programming

Reactive programming (RP) datové toky a šíření změn v programu změny v datech se automaticky propagují publisher-subcriber architektonický vzor jeden z konkrétních modelů pro RP publisher produkuje data subsciber asynchronně data zpracovává mezi P a S můžou být procesory transformující data Publisher Publisher proud dat Subscriber Subscriber proč RP jednodušší kód, efektivnější, rozšíření stream API

Publisher-Subsriber v Javě Flow API (Reactive streams) java.util.concurrent.flow od Java 9 Publisher Publisher požadavek na N elementů N elementů Subscriber Subscriber kombinace iterátoru a Observer vzoru

Flow API @FunctionalInterface public static interface Flow.Publisher<T> { public void subscribe(flow.subscriber<? super T> subscriber); public static interface Flow.Subscriber<T> { public void onsubscribe(flow.subscription subscription); public void onnext(t item) ; public void onerror(throwable throwable) ; public void oncomplete() ; public static interface Flow.Subscription { public void request(long n); public void cancel() ; public static interface Flow.Processor<T,R> extends Flow.Subscriber<T>, Flow.Publisher<R> {

Flow API SubmissionPublisher implementuje Publisher interface asynchronně publikuje dodaná data konstruktor bez parametrů používá ForkJoinPool.commonPool() další konstruktory parametr pro exekutor metody subscribe(flow.subscriber<? super T> subscriber) submit(t item)...

Observer pattern objekt (observer) sleduje druhý objekt (observable) pokud se druhý objekt změní, upozorní všechny sledovatele java.util.observer java.util.observable pozor od Java 9 jsou Deprecated (nahrazeny Flow) Observable +addobserver() +notifyobservers() update +update() Observer použití UI Observable UI komponenty Observer reakce na UI události 16

Java Ještě k vláknům

ThreadLocal vlastní kopie pro každé vlákno obvykle se používají jako statické atributy metody T get() protected T initialvalue() void remove() void set(t value) static <S> ThreadLocal<S> withinitial(supplier<? extends S> supplier)

JAVA GUI (in the std library) 19

Overview Java 1.0 AWT Abstract Window Toolkit goal the same good-looking GUI on all platforms many limitations (e.g. 4 fonts only) hard to use it "non-object-based" approach Java 1.1 new event model object-based approach Java 1.2 new GUI Swing a part of JFC (Java Foundation Classes) Java 8 JavaFX new UI, exists since 2009 (had to be installed separately) Java 11 JavaFX removed from std lib https://openjfx.io/ 20

Swing packages javax.swing... uses also classes from java.awt... many classes extends classes from java.awt... fully implemented in Java the same look-and-feel on all platforms look-and-feel can be modified adjusted to a platform support for 2D graphics, printing, drag-and-drop, localization,... 21

Hello World import javax.swing.*; public class HelloWorldSwing { private static void createandshowgui() { JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("HelloWorldSwing"); frame.setdefaultcloseoperation(jframe.exit_on_close); JLabel label = new JLabel("Hello World"); frame.getcontentpane().add(label); frame.pack(); frame.setvisible(true); public static void main(string[] args) { javax.swing.swingutilities.invokelater(new Runnable() { public void run() { createandshowgui(); ); 22

Události GUI se ovládá pomocí událostí (events) př. stisknutí tlačítka událost zpracování událostí listener objekt si zaregistruje listener dostává informace o události mnoho druhů událostí (a jim odpovídající listenery) př. stisk tlačítka, zavření okna, pohyb myši,... public class ButtonAndLabel implements ActionListener {... JButton button = new JButton("Click here"); button.addactionlistener(this);... public void actionperformed(actionevent e) { clicks++; label.settext("hello World: "+clicks); Observer pattern 23

Události jeden listener lze zaregistovat pro více událostí public class TempConvert implements ActionListener {... input = new JTextField(); convertbutton = new JButton("Preved"); convertbutton.addactionlistener(this); input.addactionlistener(this);... public void actionperformed(actionevent e) { int temp = (int) ((Double.parseDouble(input.getText())-32)*5/9); cellabel.settext(temp+" Celsius"); 24

Vlákna obsluha událostí a vykreslování GUI jedno vlákno (event-dipatching thread) zajišťuje postupné obsluhování událostí každá událost se obslouží až po skončení předchozí obsluhy události nepřerušují vykreslování SwingUtilities.invokeLater(Runnable dorun) statická metoda provede kód v dorun.run() pomocí vlákna obsluhujícího GUI počká se, až budou všechny události obslouženy metoda okamžitě skončí nečeká, až se kód provede používá se, pokud program upravuje GUI SwingUtilities.invokeAndWait(Runnable dorun) jako invokelater(), ale skončí, až se kód provede 25

GUI více v LS 26

Java Pokračování...

Kam dál... NPRG021 Pokročilé programování na platformě Java LS 2/2 obsah GUI (Swing, JavaFX) Reflection API, Classloaders, Security Generické typy, anotace RMI JavaBeans Java Enterprise Edition: EJB, Servlets, Java Server Pages, Spring,... Java Micro Edition: Java pro mobilní a Embedded systémy, CLDC, MIDP, MEEP RTSJ, Java APIs for XML, JDBC, JMX, Kotlin a další Java jazyky Android částečně povinné pro NPRG059 Praktikum z pokročilého objektového programování povinný předmět pro některé Mgr. okruhy