1 / 63

4IT101

4IT101. Testování a ladění, dokumentace API třídy, třída Object -některé metody, datové struktury – seznamy. Testování a ladění. Jednotkové testování. Slouží k testování jednotlivých tříd.

dawson
Download Presentation

4IT101

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 4IT101 Testování a ladění, dokumentace API třídy, třída Object-některé metody, datové struktury – seznamy

  2. Testování a ladění

  3. Jednotkové testování • Slouží k testování jednotlivých tříd. • Testuje se každá metoda (neprivátní), která vrací hodnotu. Zda při zadaných vstupech vrací odpovídající výstupy. • Testuje se také, zda metoda správně vyhazuje výjimky, či zda nevyhazuje výjimky v případě správných vstupů.

  4. Postup práce při vývoji podporovaném testy • navrhnout rozhraní vytvářené a testované třídy • navrhnout a implementovat testy • naimplementovat vytvářenou třídu • spustit testy • dokud neprojdou všechny testy, upravovat kód a znovu testovat

  5. JUnit • Testovací framework JUnit je přímo zakomponován v BlueJ ve verzi 4.8. • Open Source nástroj pro testování tříd napsaných v Javě (i tento nástroj je napsán v Javě) • K dispozici na www.junit.org ve verzi 4.10 - od verze 4.0 se používají anotace

  6. Vytváření testů v JUnit • Testy jedné třídy se vytváří jako samostatná třída. • Každý test je jedna metoda, výsledek (projde/neprojde) se zjistí: • pomocí metody assertXxx – porovnávají se očekávané hodnoty a skutečné hodnoty, • pomocí metody fail(String textChyby) se ohlásí chyba – používá se v případě, že nelze použít metoda assertXxx (např. při zjišťování, zda se opravdu vyskytne výjimka),

  7. Metody assertXxx() • assertEquals(očekávanáHodnota, skutečnáHodnota) • assertEquals(zpráva,očekávanáHodnota, skutečnáHodnota) • assertFalse(podmínka) • assertFalse(zpráva, podmínka)

  8. Metody assertXxx() • assertTrue • assertNull • assertNotNull • assertSame • assertNotSame

  9. Používané anotace • @Test - označuje test, v každé testovací třídě několikrát • @Before - označuje metodu spouštěnou před každým testem (testovací přípravek, setUp) • @After – označuje metodu spouštěnou po každém testu (tearDown) • @BeforeTest • @AfterTest

  10. Pořadí spouštění metod při spuštění testů • Metoda označená @BeforeTest • Metoda označená @Before • Metoda označená @Test • Metoda označená @After • …………. • Metoda označená @Before • Metoda označená @Test • Metoda označená @After • Metoda označená @AfterTest

  11. Importy při testování • import org.junit.After; • import org.junit.Before; • import org.junit.Test; • import static org.junit.Assert.*;

  12. Debugging • Použití speciálního nástroje, který je buď samostatný nebo je součástí vývojového prostředí • Pomocí zarážek (breakpointů) zastavuje provádění kódu a umožňuje krokování a prohlížení obsahu proměnných a datových atributů

  13. Debugger v BlueJ • Spuštění přes volbu Zobrazit • Umožňuje nastavit zarážky a krokovat kód • Umožňuje prohlížení aktuálního obsahu proměnných

  14. Dokumentace

  15. Druhy dokumentace • Uživatelská • Help • Manuál • Programátorská • Grafická – diagramy tříd, sekvenční diagramy, atd. • Dokumentace kódu (dokumentace API) • Vlastní kód (včetně případných komentářů)

  16. Dokumentace API Javy • Formát html • Dostupná na www.oracle.com, odkaz je i na java.vse.cz

  17. Tvorba dokumentace kódu • Podpora pro tvorbu dokumentace je zabudována již přímo v jazyce. • Součástí Java SE SDK je nástroj javadoc, který generuje dokumentaci přímo ze zdrojových kódů tříd opatřených strukturovanými komentáři.

  18. Javadoc • Do zdrojového kódu se na určená místa připisují komentáře uvozené /** • Komentáře, které budou součástí dokumentace, mohou obsahovat i html kód pro formátování. • V komentářích se používají speciální značky pro javadoc, které se pak příslušným způsobem promítají do dokumentace.

  19. Značky pro javadoc • @author jméno • @version označení • @param název popis • @return popis • @throws název popis • @exception název popis • @deprecated komentář • @since verze • @see odkaz • {@ link název text}

  20. Komentář k celé třídě /** * Tato třída implementuje interface Kalkulator, které představuje komunikační rozhraní * mezi logikou a grafikou jednoduché celočíselné kalkulačky. * Třída implementující toto rozhraní představuje logiku aplikace. * Rozhraní má tři skupiny metod: * a) pomocí metody getHodnotaKZobrazeni grafická třída zjišťuje co má zobrazit na * displeji, * b) metody cislice, plus, minus, rovnaSe a vymaz se volají při stisknutí příslušné * klávesy na kalkulačce, * c) metody getAutor a getVerze jsou informační * * * @author Jarmila Pavlíčková * @version 10.10.2007 */ public class MujKalkulator implements Kalkulator {

  21. Vygenerovaná dokumentace

  22. /** * Metoda vrací hodnotu, která se má zobrazit na displayi kalkulacky. Tato metoda * se obvykle volá po zavolání metody odpovídající stisku tlačítka. * * @return hodnota k zobrazení */ public int getHodnotaKZobrazeni() { return 0; } /** * metoda se volá při stisknutí tlačítka s číslicí na kalkulačce. Parametrem * je hodnota na stisknuté klávese. * * @param hodnota hodnota na stisknutém tlačítku, hodnota je v rozsahu * od 0 do 9 */ public void cislice(int hodnota) { } Komentáře k jednotlivým metodám

  23. Vygenerovanádokumentace

  24. Třída Object

  25. protected a clone()

  26. Metoda toString() public String toString() • Překrývání této metody je doporučeno • Metoda je použita automaticky kdykoli je instance třídy parametrem metody System.out.println() nebo použijete operátor + a druhý operand je typu String • Když metodu ve Vaší třídě nepřekryjete, bude výpis obsahovat jméno třídy a hashCode např. Ucet@82f0db

  27. Metoda toString() ve třídě Ucet public class Ucet { private int cislo; private String vlastnik; private double stav; @Override public String toString() { return ("Ucet cislo: "+cislo+",vlastnik: "+vlastnik); } .................................

  28. Anotace @Overiide • Tato anotace je kontrolovaná překladačem a nedovolí metodu přetížit pouze překrýt (nedovolí vám napsat jinak hlavičku metody)

  29. Metoda equals() public boolean equals( Object o) • je reflexivní, tj. x.equals(x) = true • je symetrická, tj. x.equals(y)= true pouze tehdy když y.equals(x)=true • je tranzitivní, tj. když x.equals(y)=true a y.equals(z) = true tak x.equals(z) musí vrátit také true • je konzistentní, tj. pro nezměněné instance vrací vždy stejnou hodnotu • pro všechny hodnoty, které nejsou null, vrací x.equals(null) false

  30. Metoda equals() Ucet ucet1 =new Ucet(1,"Dana",10); Ucet ucet2 =new Ucet(1,"Dana",10); boolean rovnost = (ucet1==ucet2); boolean rovnost2 = ucet1.equals(ucet2); 1,"Dana",10.0 1,"Dana",10.0

  31. Kdy nepřekrývat equals() • Každá instance dané třídy je svou podstatou jedinečná, to platí pro třídy, které představují aktivní jednotky např. třída Thread představující vlákno aplikace. • Porovnání dvou instancí je pro aplikaci nepodstatné, např. porovnání dvou generátorů náhodných čísel.

  32. Kdy nepřekrývat equals() • Metoda equals() je již překrytá u předka a implementace vyhovuje i u potomka (blížší informace při výkladu dědičnosti). • Daná třída je soukromou vnitřní třídou a metodu equals() nebude nikdo moci „z venku“ zavolat a mi ji nepotřebujeme

  33. Postup při překrývání equals • Porovnáme odkazy, pokud jsou shodné vrátíme hodnotu true. • Pomocí operátoru instanceof ověříme, za parametr je správného typu. Pokud parametr není odpovídajícího typu, vrátíme hodnotu false. • V dalším kroku převedeme (přetypujeme) parametr na odpovídající typ. • Pro každý „významný” atribut (atribut, který jste se rozhodli zařadit do porovnávání) zjistíme rovnost.

  34. Zjišťování rovnosti datových atributů • Pro zjišťování rovnosti datových atributů, které jsou primitivního typu, použijeme ==. Pro porovnání referenčních typů metodu equals(). • U hodnot referenčních typů je třeba ještě před porovnáváním zjistit, zda neobsahují hodnotu null, protože by při volání metody equals() byla vyhozena výjimka NullPointerException.

  35. Metoda equals() ve třídě Prostor public class Prostor { private String nazev; …………………………………………… @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof Prostor)) { return false; } Prostor druhy = (Prostor) o;

  36. Metoda equals() ve třídě Prostor if (this.nazev != null && druhy.nazev != null && this.nazev.equals(druhy.nazev)) { return true; } else { if (this.nazev == null && druhy.nazev == null) { return true; }   else { return false; } } //return (java.util.Objects.equals(this.nazev, druhy.nazev)); } ................................................

  37. Datové struktury

  38. Pepa Jarmila Jakub Honza Filip Lukáš Tomáš ... Datové struktury

  39. Pepa • Vašek Dušan • 5804 Luboš Jarmila • Renata • 5806 pondělí 8 úterý 9 středa 7 čtvrtek 10 pátek 6

  40. Kolekce • Rozhraní • Implementace • Algoritmy • Generické typy Collections

  41. Základní vlastnosti seznamů (List) • Libovolný počet prvků • Udržuje pořadí • Může obsahovat více prvků stejné hodnoty • Lze používat indexy

  42. Vytvoření seznamu List <Ucet> seznamUctu = new ArrayList<Ucet>(); List <Ucet> seznamUctu = new ArrayList<>(); List<String> seznam = new ArrayList<String>(); List<String> seznam = new ArrayList<>(); List<Integer> seznamCisel = new ArrayList<Integer>(); List<Integer> seznamCisel = new ArrayList<>(); Operátor diamand, novinka Javy 7.0

  43. Vkládání položek do seznamu seznamUctu.add(new Ucet (1,“Pepa“,2000.00); seznam.add(“pes”); seznam.add(“kočka”); seznam.add(“pes”); • Metoda add(E prvek)

  44. Základní vlastnosti množin (Set) • Libovolný počet prvků • Neudržuje pořadí • Nemůže obsahovat více prvků stejné hodnoty • Nelze používat indexy

  45. Vkládání položek do množiny Set<String> mnozina = new HashSet<String>(); Set<String> mnozina = new HashSet<>(); mnozina.add("pes"); mnozina.add("kočka"); mnozina.add("pes"); mnozina.add("morče"); • Metoda add(E prvek)

  46. Metody rozhraní Collection<E>

  47. Procházení kolekce - “for each” for(typ identifikátor : kolekce) { příkaz; } for (String zvire : seznam){ System.out.println(zvire); } for (String zvire : mnozina){ System.out.println(zvire); }

More Related