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



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

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

JUnit.

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

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

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.

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

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

Programozási nyelvek Java

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

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

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

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

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Osztályok. 4. gyakorlat

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

Szoftverminőségbiztosítás

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

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

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?

A feladatok megoldásához felhasználandó annotációk leírásait az alábbi URL-en találja meg:

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

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

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

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

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

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

Programozási technológia 2.

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

OOP #14 (referencia-elv)

Programozási nyelvek Java

Java és web programozás

RIA Rich Internet Application

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

Programozási nyelvek Java

Java IX. telkezelés a Java-ban

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat

Szoftvertesztelés Alapok

Java IX. telkezelés a Java-ban

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

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

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

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)

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Objektumorientált programozás C# nyelven

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

Programozási nyelvek II. JAVA

Java programozási nyelv 6. rész Java a gyakorlatban

Java és web programozás

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

Globális operátor overloading

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

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

ELTE, Informatikai Kar december 12.

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

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

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

Programozás I. Első ZH segédlet

Programozási nyelvek Java

Java és web programozás

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

JNDI - alapok. Java Naming and Directory Interface

Objektumorientált programozás C# nyelven

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Java I. A Java programozási nyelv

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Öröklés és Polimorfizmus

Pénzügyi algoritmusok

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Specifikáció alapú teszttervezési módszerek

Specifikáció alapú teszttervezési módszerek

Java VII. Polimorfizmus a Java nyelvben

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

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

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Collections. Összetett adatstruktúrák

Bánsághi Anna

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

Programozási technológia

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Élő webes alkalmazások rendszerfelügyelete cím- és tartalomteszteléssel

Objektum orientált kiterjesztés A+ programozási nyelvhez

Interfészek. PPT 2007/2008 tavasz.

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozási nyelvek II. JAVA

Programozási nyelvek Java

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

OOP és UML Áttekintés

Függőség injekció Konstantinusz Kft 2010

4. gyakorlat: Teszttervezés és integráció

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

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

WebService tesztelés. SOAPui Pro, GreenPepper és Confluence használatával. Verhás & Verhás Szoftver Manufaktúra KNOW-HOW

Bánsághi Anna

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

Átírás:

Tartalom Integrált fejlesztés Java platformon JUnit JUnit használata Tesztelési technikák Demo 2 A specifikáció alapján teszteljük a program egyes részeit, klasszikus V-modell szerint Minden olyan metódust, amelynek működése nem triviális Ezen tesztek lefutása egymástól független, lehetőleg más személy készíti el, mint az implementációt Ezt követi az integrációs- és rendszerteszt 4 Klasszikus hibakeresési módszerek Klasszikus hibakeresési módszerek/2 Folyamatos kiírások, System.out.println() Egyszerű, nem igényel futtatókörnyezetet, külön jar-t Teleszemeteli a forráskódot Hosszú, átláthatatlan kimenet Manuális ellenőrzés szükséges a program minden lefutása esetén Debugger IDE támogatással, minden változó értéke kiolvasható A kód minden változtatása, javítása után lépésről lépésre végig kell haladni Manuálisan kell összehasonlítani itt is a kapott értékeket az elvártakkal 5 6 1

JUnit Keretrendszer tesztelés támogatására Fordítási időben csatolni kell JAR fájlt Jelenleg a 4.10-es verzió a legfrissebb Eredetileg a Smalltalk nyelvhez készült (SUnit) Java: JUnit C: CUnit C++: CPPUnit Sok más nyelvhez is JUnit használata 7 Parancssori használat IDE támogatás A JAR fájl legfrissebb változata letölthető: http://sourceforge.net/projects/junit/files/ Hozzá kell adni a classpath-hoz set CLASSPATH=%CLASSPATH%;%JUNIT_HO ME%\junit.jar El kell indítani a futtatni kívánt tesztet java org.junit.runner.junitcore test.alltests Eclipse-ben, Netbeansben beépített támogatás Külön hozzáadási lehetőség New/JUnit TestCase Külön futtatási beállítás 9 10 Teszt készítése Teszt készítése Konvenciók (nem szükséges): test mappában a teszt forráskódja Azonos package-ben mint a tesztelendő osztály Egy osztály metódusait közös osztályban teszteljük test... elnevezésű metódusok annotácó jelzi a tesztmetódust, pl.: public void addtest() { BigInteger a = new BigInteger( 11 ); BigInteger b = new BigInteger( 42 ); BigInteger c = a.add(b); asserttrue(c.tostring().equals( 53 )); 11 12 2

Helyesség ellenőrzése org.junit.assert osztály Tipikusan statikusan importálva asserttrue(boolean bool) Emellett rengeteg másik függvény (~50) Opcionális String paraméter: hibaüzenet Assert osztály assertequals([string message,]? expected,? actual) assertarrayequals([string message,]?[] expected,?[] actual) Opcionális hibaüzenet? helyén állhat tetszőleges primitív típus és Object float/doubleesetén érdemes megadni egy ε paramétert is asserttrue/assertfalse([string message,] boolean condition) assertnull/assertnotnull([string message,] Object reference) assertsame/assertnotsame([string message,] Object expected, Object actual) 13 14 AssertionError Assume Amennyiben hibás a teszt, akkor egy AssertionError keletkezik Ez az Error leszármazottja, nem ellenőrzött kivétel Nem a teszt hibája, valamilyen előfeltétel sérül Ignored lesz a teszt Failed helyett pl.: public void calculatetotalsalary() { DBConnection dbc = Database.connect(); assumenotnull(dbc); // 15 16 Kivételek tesztelése Fixture Fontos a keletkező kivételek tesztelése is Első módszer: try-catch- assert: kivétel típusára, message-ére, stb. Másik módszer: opcionális paraméter annotációhoz: (expected=indexoutofboundsexception.class) public void empty() { new ArrayList<Object>().get(0); Sok esetben szükség van bizonyos objektumok egy csoportján több művelet sikerességét is ellenőrizni, esetleg bizonyos erőforráshoz csatlakozni, majd elengedni. A különböző funkciók tesztelésére külön teszteseteket célszerű készíteni. Nem szeretnénk kódot duplikálni. Megoldás: az úgynevezett fixture használata. Minden teszteset számára ugyanaz a kiindulási környezet érhető el, és nem osztják meg egymás között a példányokat. 17 18 3

Fixture - megvalósítás private o; private dbc; public void setup() { o = new Object(); DBConnection dbc = Database.connect(); // public void teardown() { dbc.close(); //... Végrehajtási sorrend A és annotációval jelölt metódusok lefutnak minden teszteset előtt és után. Class és Class. Sorrend: Class #1... #N Class 19 20 Suite Paraméteres tesztelés Több tesztosztály egybefoglalására @RunWith(Suite.class) @Suite.SuiteClasses({ JunitTest1.class, JunitTest2.class ) public class JunitSuiteTest { //... Sok esetben szükség lehet egy teszteset elvégzésére több különböző paraméterrel pl.: határérték tesztelés Megoldás: parametrizált tesztesetek A megadott tesztesetek és paraméterek minden kombinációban (Déscartes-szorzat) lefutnak Minden esethez külön példány konstruktor híváson keresztül @RunWith(Parameterized.class) 21 22 Paraméteres tesztelés - példa @RunWith(Parameterized.class) public class CalculatorTest { double a, b; Calculator calc; public CalculatorTest(double a, double b) { this.a = a; this.b = b; public void setup() { calc = new Calculator(); public void testmultiply() { double result = calc.multiply(a, b); Assert.assertEquals(a * b, result, 0); @Parameters public static List<Object[]> parameters() { List<Object[]> params = new ArrayList<Object[]>(); params.add(new Object[] {0.0, 0.0); params.add(new Object[] {10.0, 0.0); params.add(new Object[] {10.0, 3.0); params.add(new Object[] {20.0, 4.0); return params; Tesztelési technikák 23 4

Mock objektumok Láthatósági problémák Komplex objektumok működését, viselkedését utánozzák egy bizonyos szempontból (ugyanazzal az interfésszel rendelkeznek). Az egységtesztek során sok külső objektumot nem célszerű, vagy nem lehetséges felhasználni, tipikusan: Nem determinisztikus működés (pl. aktuális idő, véletlen-szám) Nehezen reprodukálható állapotot szeretnénk tesztelni (pl. hálózati hiba) Lassú (pl. adatbázis kapcsolat) Még nem készült el Ilyen módon az aktuális egység izoláltan tesztelhetővé válik. public láthatóság értelemszerűen tudjuk tesztelni protected / package láthatóság ha a tesztosztályok is ugyanabban a package-ben vannak private láthatóság Java Reflection API getdeclaredmethods() setaccessible(true) 25 26 Demo 5