public class HelloWorld extends TestCase { public void testmultiplication() { // Testing if 3*2=6: assertequals ("Multiplication", 6, 3*2);

Hasonló dokumentumok
A legalacsonyabb szintű tesztelés. A programot felépítő egységek tesztelése Unit: egy rendszer legkisebb önálló egységként tesztlehető része.

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Sikeres végrehajtás(pass): ez azt jelenti, hogy a teszt rendben lefutott, és az ellenőrzési feltételek mind teljesültek.

JUnit.

Programozási technológia 2.

BME Irányítástechnika és Informatika Tanszék A programozás alapjai

Szűgyi Zalán. Unit tesztek Java és C++ környezetben

A JUnit alapú egységteszteléshez felhasználandó annotációk leírásait az alábbi URL-en találja meg:

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22

Programozási technológia II 7. előadás. Verifikáció és validáció Giachetta Roberto

Programozási nyelvek Java

Szoftvertechnológia 10. előadás. Verifikáció és validáció. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

OOP: Java 8.Gy: Abstract osztályok, interfészek

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Java és web programozás

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Concurrency in Swing

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Modern unit és integrációs tesztelés

Osztályok. 4. gyakorlat

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Szoftvertechnológia alapjai Java előadások

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

1. Alapok. Programozás II

Informatika terméktervezőknek

Kivételkezelés, naplózás. Exception handling, logging

Programozási nyelvek Java

ELTE, Informatikai Kar december 12.

Programozási nyelvek II. JAVA

Programozás I. Első ZH segédlet

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

A szerzõrõl... xi Bevezetés... xiii

ISA szimulátor objektum-orientált modell (C++)

Java Programozás 3. Gy: Java GUI. Swing, AWT

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

A Feldspar fordító, illetve Feldspar programok tesztelése

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Teszttervezés. Majzik István, Micskei Zoltán. Integrációs és ellenőrzési technikák (VIMIA04) Méréstechnika és Információs Rendszerek Tanszék

Java Programozás 11. Ea: MVC modell

Abstract osztályok és interface-ek. 7-dik gyakorlat

Tervminták a valósidejű gyakorlatban

Java Programozás 1. Gy: Java alapok. Ismétlés ++

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Delegátumok C#-ban Krizsán Zoltán iit

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Eclipse és Java teljesen kezdőknek Segédanyag

Teszttervezés. Majzik István, Micskei Zoltán. Integrációs és ellenőrzési technikák (VIMIA04) Méréstechnika és Információs Rendszerek Tanszék

Programozás II gyakorlat. 6. Polimorfizmus

Objektumorientált programozás C# nyelven

Algoritmusok és adatszerkezetek II.

OOP: Java 8.Gy: Gyakorlás

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Java. JIT (Just in Time) fordítók alkalmazása, optimalizálás AOT (Ahead of Time) fordítók alkalmazásának lehetősége

Tulajdonságalapú tesztelés

JNDI - alapok. Java Naming and Directory Interface

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

OOP: Java 4.Gy: Java osztályok

7. K: JAVA alapok Konzultáció

Pénzügyi algoritmusok

Fejezetek az "Effective Java" c. könyvből

Objektumorientált programozás C# nyelven

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Stateless Session Bean

Java programozási nyelv 5. rész Osztályok III.

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Magas szintű programozási nyelvek 2 Előadás jegyzet

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Informatikai Navigátor

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

4. Gy: JAVA osztályok

Madarassy László, mérnök, BME - Mobil Innovációs Központ. lmadarassy@mik.bme.hu

Konkurens TCP Szerver

Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék. Tesztelés és profiling

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

BME MOGI Gépészeti informatika 4.

Felhasználó által definiált adattípus

Mobil Informatikai Rendszerek

Java programozási nyelv 4. rész Osztályok II.

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május)

Adatbázisok webalkalmazásokban

Segédanyag: Java alkalmazások gyakorlat

OO rendszerek jellemzői

Programozási nyelvek II.: JAVA

Unit tesztelés. Honfi Dávid, Micskei Zoltán. Integrációs és ellenőrzési technikák (VIMIA04) Méréstechnika és Információs Rendszerek Tanszék

Swing. (A javax.swing csomag)

Java és web programozás

Átírás:

Unit testing

Unit testing Unit: egy program legkisebb különállóan tesztelhető része (procedurális nyelv esetén egy függvény, objektum orientált nyelv esetén egy metódus) A tesztesetek egymástól függetlenek, a teszteket a programozók írják Unit test: egy szerződés melynek egy adott programrész eleget kell tegyen Minden (fontosabb) metódushoz el kell készíteni egy ilyen tesztesetet Automatizálás: unit-testing frameworks Refactoring támogatás Test-driven development, extreme programming Korlátok: Hiányosság tesztelési technika: a hibák jelenlétét mutathatjuk ki, nem bizonyíthatjuk hiányukat Nem alkalmas integrációs tesztelésre, vagy teljesítménnyel kapcsolatos problémák kimutatására Teszt kód hosszúsága (boolean decision true/false 2 sor) jól szabályozott fejlesztési folyamat és version control system jelenlétének igénye

JUnit Kent Beck: SUnit (Smalltalk) Kent Beck, Erich Gamma: JUnit Unit-testing framework Hello World JUnit 3.8-ban: public class HelloWorld extends TestCase { public void testmultiplication() { // Testing if 3*2=6: assertequals ("Multiplication", 6, 3*2); Hello World JUnit 4.0-ban: public class HelloWorld { @Test public void testmultiplication() { // Testing if 3*2=6: TestCase.assertEquals ("Multiplication", 6, 3*2);

JUnit @Test public void simpleadd() { Money m12chf = new Money(12, "CHF"); Money m14chf = new Money(14, "CHF"); Money expected = new Money(26, "CHF"); Money result = m12chf.add(m14chf); asserttrue(expected.equals(result)); Kivételek kezelése, várt kivételek: @Test(expected= IndexOutOfBoundsException.class) public void empty() { new ArrayList<Object>().get(0);

Fixture Ha több tesztet akarunk lefuttatni ugyanazon az objektumhalmazon (fixture): Mindenik objektumhoz hozzárendelünk egy field-et Bevezetünk egy @org.junit.before al jegyzett metódust, ami inicializálja az objektumokat Bevezetünk egy @org.junit.after el jegyzett metódust, ami felszabadítja a lefoglalt erőforrásokat public class MoneyTest { private Money f12chf; private Money f14chf; private Money f28usd; @Before public void setup() { f12chf= new Money(12, "CHF"); f14chf= new Money(14, "CHF"); f28usd= new Money(28, "USD");

Test suite Ha egy olyan programot szeretnénk készíteni/futtatni, ami az összes tesztünket lefuttatja, a megoldás test suite készítése: import junit.framework.test; import junit.framework.testsuite; public class SampleTestSuite { public static Test suite() { TestSuite suite = new TestSuite("Sample Tests"); // Add one entry for each test class or test suite. suite.addtestsuite(sampletest.class); // For a master test suite, use this pattern. // (Note that here, it's recursive!) suite.addtest(anothertestsuite.suite()); return suite;

Eclipse and unit testing Eclipse: JUnit támogatás Név-konvenciók: Test Case Class: [classname]test.java Test Case Method: test[methodname] Test Suite Eclipse-ben: AllTests.java Javaslat: a teszt kód elválasztása a forráskódtól, valamint a JUnit és FIT tesztek elválasztása FIT: Ward Cunningham által bevezetett JUnit-on alapuló, azt kiterjesztő eszköz automatizált elfogadási tesztek készítésére. A tesztesetek html táblákban vannak megjelenítve, így a felhasználók által könnyebben átláthatóak/módosíthatóak (Eclipse: FitRunner plug-in)

Eclipse unit testing példa 1. lépés: projekt létrehozása, a junit.jar hozzáadása a projekthez, a junit teszteseteket tartalmazó könyvtár létrehozása (a java build path source részénél is) 2. lépés: a tesztelendő osztály létrehozása (esetünkben MyClass.java) public class MyClass { public int multiply(int x, int y) { return x + y; 3. lépés: a megfelelő teszteseteket tartalmazó osztály generálása (jobb-click a MyClass.java-ra, new JUnit Test Case, a könyvtár nevének beállítása)

Eclipse unit testing példa 4. lépés: a tesztek implementációja import static org.junit.assert.*; import org.junit.test; public class MyClassTest { @Test public void testmultiply() { MyClass tester = new MyClass(); assertequals("result", 50, tester.multiply(10, 5)); 5. lépés: a teszt futtatása (jobb-click a MyClassTest.java-ra, run as JUnit Test)

Eclipse unit testing példa

Eclipse-junit: fixture példa import junit.framework.testcase; public class SampleTest extends TestCase { private java.util.list emptylist; /** * Sets up the test fixture. * (Called before every test case method.) */ protected void setup() { emptylist = new java.util.arraylist(); /** * Tears down the test fixture. * (Called after every test case method.) */ protected void teardown() { emptylist = null;

Eclipse-junit: fixture példa public void testsomebehavior() { assertequals("empty list should have 0 elements", 0, emptylist.size()); public void testforexception() { try { Object o = emptylist.get(0); fail("should raise an IndexOutOfBoundsException"); catch (IndexOutOfBoundsException success) {

Assertion Statement Reference @Test public void method() Jelzi, hogy teszt metódusról van szó @Before public void method() A metódus minden teszt előtt végre lesz hajtva. A tesztelési környezet előkészítésére alkalmazzuk, pl. bemeneti adatok beolvasása, példányosítások) @After public void method() Minden teszt után végre lesz hajtva, lefoglalt erőforrások felszabadítására alkalmazzuk @BeforeClass public void method() A tesztek futtatása előtt lesz végrehajtva, előkészítő műveletek elvégzésére alkalmazzuk (pl. adatbázis kapcsolat megnyitása) @AfterClass public void method() Az összes teszt lefuttatása után lesz végrehajtva, erőforrások felszabadítására alkalmazzuk )pl. adatbázis kapcsolat bezárása) @IgnoreWill a teszt metódus figyelmen kívül hagyása, pl. ha a hozzátartozó kód változott és a teszt kódja még nem került megfelelő frissítésre @Test(expected=IllegalArgumentException.class) Teszteli, hogy a metódus egy bizonyos típusú kivételt dob-e @Test(timeout=100) Sikertelen ha a metódus futás tovább tart mint 100 millisec.

Assertion Statement Reference fail(string) sikertelenné teszi a metódust, segítségével ellenőrizhetjük, hogy elérünk-e egy bizonyos kódrészt asserttrue(true) igaz (true) értéket ad assertsequals([string message], expected, actual) Ellenőrzi, hogy az értékek ugyanazok-e (tömbök esetében a referenciát ellenőrzi, nem az értékeket) assertsequals([string message], expected, actual, tolerance) Float és double értékek esetében megszabhatjuk a tolerancia küszöböt (hány tizedes kell megegyezzen) assertnull([message], object) Ellenőrzi, hogy null objektumról van-e szó assertnotnull([message], object) assertsame([string], expected, actual) Ellenőrzi, hogy a két változó ugyanazon objektumra mutat-e assertnotsame([string], expected, actual) asserttrue([message], boolean condition) Ellenőrzi, hogy a feltétel igaz-e try {a.shouldthroughexception(); fail("failed") catch (RuntimeException e) {asserttrue(true); Alternatíva kivételek ellenőrzésére