JUnit příklad na použití

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

SW_03. Implementace a testování

KTE / ZPE Informační technologie

Z. Kotala, P. Toman: Java ( Obsah )

Algoritmizace a programování

1. Téma 12 - Textové soubory a výjimky

Výjimky. v C# a Javě

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

17. Projekt Trojúhelníky

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

Principy objektově orientovaného programování

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Textové soubory. alg9 1

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

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

Výjimky. Tomáš Pitner, upravil Marek Šabo

RMI Remote Method Invocation

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Java Výjimky Java, zimní semestr

Soubor jako posloupnost bytů

Výčtový typ strana 67

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ)

Iterator & for cyklus

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

KTE / ZPE Informační technologie

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Abstraktní datové typy: zásobník

Seminář Java II p.1/43

Testování, ladění a dokumentace programů

Motivační příklad reálný svět. výroba (assembly line)

Úvod do programování - Java. Cvičení č.4

Datové struktury. alg12 1

Dědičnost (inheritance)

Výjimky. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Úvod do programovacích jazyků (Java)

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

OOPR_05. Případové studie

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

Java Řetězce Java, zimní semestr

Typický prvek kolekce pro české řazení

Programování v Javě I. Leden 2008

Řídicí příkazy KAPITOLA 3. Vstup znaků z klávesnice

Programovací jazyk Java

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

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

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

Regulární výrazy. Vzory

Generické programování

Java testovací třída

Zápis programu v jazyce C#

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

Podmínky na zápočet. Java, zimní semestr

Algoritmizace a programování

PREPROCESOR POKRAČOVÁNÍ

6. Příkazy a řídící struktury v Javě

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Příkazy a řídicí struktury v Javě. Tomáš Pitner, upravil Marek Šabo

Car Agent. Struktura chování:

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Teoretické minimum z PJV

8. přednáška: Soubory a proudy

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

IRAE 07/08 Přednáška č. 1

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

boolean hasnext() Object next() void remove() Kolekce

JAVA Unit testing Java, zimní semestr

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Příkaz while. while (podmínka) { příkaz; } Příklad: int i=0; while (i < 10) { System.out.println(i); i++; } // vypíše čísla od 0 do 9

1. Programování proti rozhraní

Objektově orientované programování

Zpracování výjimečných situací

Mnohotvarost (polymorfizmus)

20. Projekt Domácí mediotéka

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

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

Spojové struktury. Spojová struktura (linked structure):

Připravil: David Procházka. Programovací jazyk C++

Ošetřování chyb v programech

9. přednáška - třídy, objekty

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Úvod do programovacích jazyků (Java)

3 KTE / ZPE Informační technologie

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

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

Jazyk C# (seminář 5)

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

X-komponenty 3.1. Uživatelská příručka. J. Kocman, V. Trojan

Transkript:

JUnit příklad na použití 1

Zadání příkladu Převod mezi římskými a arabskými číslicemi. Platí následující pravidla: hodnoty písmen se až na výjimky sčítají (I, II, VIII) Písmena vyjadřující mocniny se mohou opakovat max. 3. Písmena vyjadřující 5, 50, 500 se neopakují. Písmena římského čísla se vyjadřují od největšího po nejmenší, záleží na pořadí. 2

Zadání příkladu Pro každou hodnotu existuje pouze jeden správný zápis římskými číslicemi. Pomocířímských číslic lze zapsat čísla v rozsahu 1 3999. 3

Vytvoření kostry třídy Třída Roman bude obsahovat dvě statické metody pro převod toroman(int) a fromroman(string). bude-li vstupní parametr toroman(int) mimo rozsah, vyvolá se výjimka IllegalArgumentException. bude-li argument metody fromroman(string) obsahovat nepřípustný znak, vyvolá se výjimka NumberFormatException. 4

public class Roman { public static int fromroman(string s) throws NumberFormatException { int vysl = 0; return vysl; Základní kostra programu public static String toroman(int i) throws IllegalArgumentException { String vysl= ""; return vysl;

public class RomanTest extends TestCase{ public RomanTest(String name) { // musí specifikovat konstruktor super(name name); protected void setup() { // počáte teční nastavení protected void teardown() { // úklid po testování // testy postupně doplnované... // obyčejn ejně deklarovaná statická metoda suite // v jejímž rámci se vytvoří seznam testů public static Test suite() { return new TestSuite(RomanTest RomanTest.class class); public static void main(string String[] args) { junit.textui textui.testrunner TestRunner.run(.run(suite suite());

// Pro vytvořen ení seznamu testů se většinouv používá příkaz kaz: return new TestSuite(RomanTest.class); //do seznamu testů se zahrnou všechny v metody začínaj nající řet etězcem test test // preferovaný způsob TestSuite seznamtestu = new TestSuite(); seznamtestu.addtest(new RomanTest( testtoromanknownvalues testtoromanknownvalues ); seznamtestu.addtest(new RomanTest( testfromromanknownvalues testfromromanknownvalues );... return seznamtestu; Alternativa metodě suite postupné přidávání testů

Testy správnosti nadefinujeme dva testy: testtoromanknownvalues() a testfromromanknownvalues() 8

class Dvojice { int arab; String roman; Dvojice(int int arab, String roman) { this.arab = arab; this.roman = roman; ; Dvojice knownvalues[] = { new Dvojice(1,"I"), new Dvojice(2,"II"), new Dvojice(3,"III"), new Dvojice(4,"IV"), new Dvojice(5,"V"), new Dvojice(6,"VI"), new Dvojice(7,"VII"), new Dvojice(8,"VIII"), new Dvojice(9,"IX"), new Dvojice(10,"X"), new Dvojice(50,"L"), new Dvojice(100,"C"), new Dvojice(500,"D"), new Dvojice(1000,"M"), new Dvojice(31,"XXXI"), new Dvojice(148,"CXLVIII"), new Dvojice(3940,"MMMCMXL"), new Dvojice(3999,"MMMCMXCIX"), ; Třída Dvojice, pole hodnot se správnými dvojicemi

public void testtoromanknownvalues() { i=0; i<knownvalues knownvalues.length length; i++){ String vysl= Roman.toRoman toroman(knownvalues knownvalues[i]. [i].arab arab); assertequals(knownvalues knownvalues[i]. [i].roman roman, vysl); Testy správnosti public void testfromromanknownvalues() { i=0; i< knownvalues.length length; i++){ int vysl= Roman.fromRoman fromroman(knownvalues knownvalues[i]. [i].roman roman); assertequals(knownvalues knownvalues[i]. [i].arab arab, vysl);

Testy výjimek Testy výjimek otestují, zda se v případě chybných vstupních parametrů bude zahlášena chyba metody. Odchytávání výjimek se provádí v kódu testu, v případě, že se výjimka neobjeví, ohlásí se chyba pomocí metody JUnit fail(string textchyby) 11

public void testtoromanexception() { int badvalues[] = {0, -1, 4000; i=0; i<badvalues badvalues.length length; i++){ try{ String vysl= Roman.toRoman toroman(badvalues badvalues[i]); catch catch(illegalargumentexception e) { continue; fail("expected IllegalArgumentException"); // test vyjimky public void testillegalcharacters() { String badvalues[] = {"I ", "i", "a", "mm", "d", "MCi" MCi"; i=0; i< badvalues.length length; i++) { try { int vysl= Roman.fromRoman fromroman(badvalues badvalues[i]); catch (NumberFormatException e) { continue; fail("expected IllegalArgumentException for: "+ badvalues[i]); ;

public void testsanity() { i= 1; i< 4000; i++){ int vysl = Roman.fromRoman fromroman(roman. (Roman.toRoman toroman(i)); assertequals(i, vysl); Test vztahů závislosti

Vlastní třída a testování Do třídy Roman metody toroman() - doplnit test intervalu hodnot public static String toroman(int i) throws IllegalArgumentException { if((i>3999) (i<= 0)) throw new IllegalArgumentException(); else { return vysl; 14

Vlastní třída a testování Dále je třeba doplnit třídu Dvojice a tabulku pro převod a doplnit odpovídajícím způsobem metodu toroman() Výpis třídy Roman Výpis třídy RomanTest 15

public class Roman { public static int fromroman(string s) throws NumberFormatException { int vysl = 0; return vysl; public static String toroman(int i) throws IllegalArgumentException { if((i>3999) (i<= 0)) throw new IllegalArgumentException(); else { int cislo =i; String vysl= ""; while(cislo >0) { j=0; j< tabulka.length length; j++){ if(cislo >= tabulka[j].arab arab) { vysl= vysl+ tabulka[j].roman roman; cislo= cislo- tabulka[j].arab arab; break; return vysl; static class Dvojice { int arab; String roman; Dvojice(int int arab, String roman){ this.arab = arab; this.roman = roman; Třída Roman

static Dvojice tabulka[] = { new Dvojice (1000, "M"), new Dvojice (900, "CM"), new Dvojice (500, "D"), new Dvojice (400, "CD"), new Dvojice (100, "C"), new Dvojice (90, "XC"), new Dvojice (50, "L"), new Dvojice (40, "XL"), new Dvojice (10, "X"), new Dvojice (9, "IX"), new Dvojice (5, "V"), new Dvojice (4, "IV"), new Dvojice (1, "I"), ; Třída Roman

public class RomanTest extends TestCase{ class Dvojice { int arab; String roman; Dvojice(int int arab, String roman) { this.arab = arab; this.roman = roman; ; Dvojice knownvalues[] = { new Dvojice(1,"I"), new Dvojice(2,"II"), new Dvojice(3,"III"), new Dvojice(4,"IV"), new Dvojice(5,"V"), new Dvojice(6,"VI"), new Dvojice(7,"VII"), new Dvojice(8,"VIII"), new Dvojice(9,"IX"), new Dvojice(10,"X"), new Dvojice(50,"L"), new Dvojice(100,"C"), new Dvojice(500,"D"), new Dvojice(1000,"M"), new Dvojice(31,"XXXI"), new Dvojice(148,"CXLVIII"), new Dvojice(3940,"MMMCMXL"), new Dvojice(3999,"MMMCMXCIX"), ; Třída RomanTest

public RomanTest(String name) { super(name name); protected void setup() { protected void teardown() { // testy postupne doplnovane public void testtoromanknownvalues() { i=0; i<knownvalues knownvalues.length length; i++){ String vysl= Roman.toRoman toroman(knownvalues knownvalues[i]. [i].arab arab); assertequals(knownvalues knownvalues[i]. [i].roman roman, vysl); public void testfromromanknownvalues() { i=0; i< knownvalues.length length; i++){ int vysl= Roman.fromRoman fromroman(knownvalues knownvalues[i]. [i].roman roman); assertequals(knownvalues knownvalues[i]. [i].arab arab, vysl);

// test vyjimky public void testtoromanexception() { int badvalues[] = {0, -1, 4000; i=0; i<badvalues badvalues.length length; i++){ try{ String vysl= Roman.toRoman toroman(badvalues badvalues[i]); catch catch(illegalargumentexception e) { continue; fail("expected IllegalArgumentException"); // test vyjimky public void testillegalcharacters() { String badvalues[] = {"I ", "i", "a", "mm", "d", "MCi" MCi"; i=0; i< badvalues.length length; i++) { try { int vysl= Roman.fromRoman fromroman(badvalues badvalues[i]); catch (NumberFormatException e) { continue; fail("expected IllegalArgumentException for: "+ badvalues[i]); ;

public void testtoomanyrepeatednumerals() { String badvalues[] = {"MMMM", "VV", "LL", "CCCC", "DD", "IIII"; i=0; i< badvalues.length length; i++) { try { int vysl= Roman.fromRoman fromroman(badvalues badvalues[i]); catch (NumberFormatException e) { fail("expected IllegalArgument for: "+ badvalues[i]); ; public void testrepeatedpairs() { String badvalues[] = {"CMCM", "CDCD", "IVIV", "IXIX", "XLXL"; i=0; i< badvalues.length length; i++){ try { int vysl= Roman.fromRoman fromroman(badvalues badvalues[i]); catch (NumberFormatException e){ continue; fail("expected IllegalArgumentException for: "+ badvalues[i]);

public void testmalformedantecedent() { String badvalues[] = {"IIMMCC", "VX", "DCM", "CMM", "CMD", "IXIV", "MCMC", "XCX", "IVI", "LM", "LD", "LC"; int vysl; i= 0; i< badvalues.length length; i++ ){ try { vysl= Roman.fromRoman fromroman(badvalues badvalues[i]); catch catch(numberformatexception e){ continue; fail("expected IllegalArgumentException for: "+ badvalues[i]+ " (" + vysl); ; public void testsanity() { i= 0; i< 4000; i++){ int vysl = Roman.fromRoman fromroman(roman. (Roman.toRoman toroman(i)); assertequals(i, vysl);

// zaklad public static Test suite() { return new TestSuite(RomanTest RomanTest.class class); public static void main(string String[] args) { junit.textui textui.testrunner TestRunner.run(.run(suite suite());