Programozási technológia 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.

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

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

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

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

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

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

Verifikáció és validáció Általános bevezető

Térinformatikai és távérzékelési alkalmazások fejlesztése. Szoftverek minőségbiztosítása

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

JUnit.

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

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)

Név: Neptun kód: Pontszám:

Térinformatikai és távérzékelési alkalmazások fejlesztése. Szoftverek minőségbiztosítása. Szoftverek minőségbiztosítása Verifikáció és validáció

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

Programozási nyelvek II. JAVA

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

ELTE, Informatikai Kar december 12.

Szoftverminőségbiztosítás

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

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

Miskolci Egyetem Általános Informatikai Tanszék

A tesztelés feladata. Verifikáció

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

Java programozási nyelv 9. rész Kivételkezelés

Szoftvertesztelés Alapok

Szoftvertesztelés - Bevezető

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

Pénzügyi algoritmusok

Programtervezés. Dr. Iványi Péter

Angolul: Extreme Programming, röviden: XP Agilis módszertan. Más módszertanok bevált technikáinak extrém módú (nagyon jó) használata

Teszt terv Új funkció implementációja meglévı alkalmazásba

BME MOGI Gépészeti informatika 4.

Programozási nyelvek II. JAVA

Modell megvalósítása. Gregorics Tibor: Eseményvezérelt alkalmazások fejlesztése I.

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

A szoftver tesztelés alapjai

1. Melyik szabvány foglalkozik dokumentumok tulajdonságainak megfogalmazásával? a. RDFS b. FOAF c. Dublin Core d. DBPedia

és az instanceof operátor

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

Integrációs mellékhatások és gyógymódok a felhőben. Géczy Viktor Üzletfejlesztési igazgató

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

Algoritmizálás, adatmodellezés tanítása 6. előadás

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

MŰSZAKI TESZTTERVEZÉSI TECHNIKÁK STRUKTÚRA ALAPÚ, VAGY FEHÉRDOBOZ TECHNIKÁK TAPASZTALAT ALAPÚ TECHNIKÁK

Programozási nyelvek Java

Szoftverminőségbiztosítás

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

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

JSF alkalmazások teljesítményhangolása JMeter és dynatrace segítségével

ORVOSTECHNIKAI ESZKÖZÖK GYÁRTMÁNYFEJLESZTÉSE AKTÍV ORVOSI ESZKÖZÖK FEJLESZTÉSE - PEMS V&V

Szoftverfejlesztés teszteléssel

Tesztelési szintek Tesztautomatizálás

Szoftverminőségbiztosítás

Miskolci Egyetem Alkalmazott Informatikai Intézeti Tanszék A minőségbiztosítás informatikája. Készítette: Urbán Norbert

Orvostechnikai eszközök gyártmányfejlesztése Aktív orvosi eszközök fejlesztése PEMS V&V. Nagy Katinka

Programozási nyelvek Java

(Teszt)automatizálás. Bevezető

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

Követelmény alapú minőségbiztosítás az államigazgatásban

Objektumorientált programozás C# nyelven

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

ESZKÖZTÁMOGATÁS A TESZTELÉSBEN

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

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

Szoftverminőségbiztosítás

Programozási nyelvek Java

Tesztelés az XP-ben Tesztelés az XP-ben. A tesztelés kulcsjellemzői:

Osztályok. 4. gyakorlat

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

Objektumorientált programozás C# nyelven

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

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

30 MB INFORMATIKAI PROJEKTELLENŐR

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

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

Informatikai projektellenőr szerepe/feladatai Informatika / Az informatika térhódítása Függőség az információtól / informatikától Információs

Programozási nyelvek Java

Kivételkezelés. Tesztelés, hibakeresés, kivételkezelés. Programozás II. előadás. Szénási Sándor

A TESZTELÉS ALAPJAI MIÉRT SZÜKSÉGES A TESZTELÉS? MI A TESZTELÉS? ÁLTALÁNOS TESZTELÉSI ALAPELVEK

OOP és UML Áttekintés

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

Digitális eszközök típusai

MŰSZAKI TESZTTERVEZÉSI TECHNIKÁK A TESZT FEJLESZTÉSI FOLYAMATA A TESZTTERVEZÉSI TECHNIKÁK KATEGÓRIÁI

Statikus technikák: A szoftver átvizsgálása. Statikus technikák: A szoftver átvizsgálása

Szoftver karbantartási lépések ellenőrzése

OO rendszerek jellemzői

Szoftvertechnolo gia gyakorlat

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

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

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

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

Szoftvertechnológia alapjai Java előadások

Interfészek. PPT 2007/2008 tavasz.

Java I. A Java programozási nyelv

MIÉRT KELL TESZTELNI?

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

Concurrency in Swing

Minőségmenedzsment és Informatika Test-Driven Development

Átírás:

Programozási technológia 2. Egységtesztelés (JUnit) Dr. Szendrei Rudolf ELTE Informatikai Kar 2018.

Minőségbiztosítás A szoftver verifikációja és validációja, vagy minőségbiztosítása (quality control) azon folyamatok összessége, amelyek során ellenőrizzük, hogy a szoftver teljesíti-e az elvárt követelményeket, és megfelel a felhasználói elvárásoknak a verifikáció (verification) ellenőrzi, hogy a szoftvert a megadott funkcionális és nem funkcionális követelményeknek megfelelően valósították meg történhet formális, vagy szintaktikus módszerekkel a validáció (validation) ellenőrzi, hogy a szoftver megfelel-e a felhasználók elvárásainak, azaz jól specifikáltuk-e eredetileg a követelményeket alapvető módszere a tesztelés 2

Módszerei Az ellenőrzés végezhető statikusan, a modellek és a programkód áttekintésével elvégezhető a teljes program elkészülte nélkül is elkerüli, hogy hibák elfedjék egymást tágabb körben is felfedhet hibákat, pl. szabványoknak történő megfelelés dinamikusan, a program futtatásával felfedheti a statikus ellenőrzés során észre nem vett hibákat, illetve a programegységek együttműködéséből származó hibákat lehetőséget ad a teljesítmény mérésére 3

Tesztelés A tesztelés célja a szoftverhibák felfedezése és szoftverrel szemben támasztott minőségi elvárások ellenőrzése futási idejű hibákat (failure), működési rendellenességeket (malfunction) keresésünk, kompatibilitást ellenőrzünk általában a program (egy részének) futtatásával, szimulált adatok alapján történik nem garantálja, hogy a program hibamentes, és minden körülmény között helyáll, de felfedheti a hibákat adott körülmények között A teszteléshez tesztelési tervet (test plan) készítünk, amely ismerteti a tesztelés felelőseit, folyamatát, technikáit és céljait 4

Tesztesetek A tesztelés során különböző teszteseteket (test case) különböztetünk meg, amelyek az egyes funkciókat, illetve elvárásokat tudják ellenőrizni megadjuk, adott bemenő adatokra mi a várt eredmény (expected result), amelyet a teszt lefutása után összehasonlítunk a kapott eredménnyel (actual result) a teszteseteket összekapcsolhatjuk a követelményekkel, azaz megadhatjuk melyik teszteset milyen követelményt ellenőriz (traceability matrix) a teszteseteket gyűjteményekbe helyezzük (test suit) A tesztesetek eredményeiből készül a tesztjelentés (test report) 5

A tesztelési folyamat tesztesetek megtervezése tesztelési terv tesztadatok előállítása tesztadatok tesztesetek végrehajtása teszteredmények eredmények összehasonlítása tesztjelentés 6

A tesztelés lépései A tesztelés nem a teljes program elkészülte után, egyben történik, hanem általában 3 szakaszból áll: 1. fejlesztői teszt (development testing): a szoftver fejlesztői ellenőrzik a program működését jellemzően fehér doboz (white box) tesztek, azaz a fejlesztő ismeri, és követi a programkódot 2. kiadásteszt (release testing): egy külön tesztcsapat ellenőrzi a szoftver használatát 3. felhasználói teszt (acceptance testing): a felhasználók tesztelik a programot a felhasználás környezetében jellemzően fekete doboz (black box) tesztek, azaz a forráskód nem ismert 7

A tesztelés lépései A fejlesztői tesztnek további négy szakasza van: egységteszt (unit test): a programegységeket (osztályok, metódusok) külön-külön, egymástól függetlenül teszteljük integrációs teszt (integration test): a programegységek együttműködésének tesztje, a rendszer egy komponensének vizsgálata rendszerteszt (system test): az egész rendszer együttes tesztje, a rendszert alkotó komponensek közötti kommunikáció vizsgálata A tesztelés egy része automatizálható, bizonyos részét azonban mindenképpen manuálisan kell végrehajtanunk 8

A tesztelés lépései felhasználói teszt felhasználói teszt kiadásteszt rendszerteszt integrációs teszt integrációs teszt fejlesztői teszt egységteszt egységteszt egységteszt 9

Nyomkövetés A tesztelést elősegíti a nyomkövetés (debugging), amely során a programot futás közben elemezzük, követjük a változók állapotait, a hívás helyét, felfedjük a lehetséges hibaforrásokat A jellemző nyomkövetési lehetőségek: megállási pontok (breakpoint) elhelyezése változókövetés (watch), amely automatikus a lokális változókra, szabható rá feltétel hívási lánc (call stack) kezelése, a felsőbb szintek változóinak nyilvántartásával A fejlesztőkörnyezetbe épített eszközök mellett külső programokat is használhatunk (pl. gdb) 10

Egységtesztek Az egységteszt során törekednünk kell arra, hogy a programegység összes funkcióját ellenőrizzük, egy osztály esetén ellenőrizzük valamennyi (publikus) metódust állítsuk be, és ellenőrizzük az összes mezőt az összes lehetséges állapotba helyezzük az osztályt, vagyis szimuláljuk az összes eseményt, amely az osztályt érheti A teszteseteket célszerű leszorítani a programegység által megengedett bemenetre, így ellenőrizve a várt viselkedését (korrektség) nem megengedett bemenetre, így ellenőrizve a hibakezelést (robosztusság) 11

Egységtesztek A bemenő adatokat részhalmazokra bonthatjuk a különböző hibalehetőségek függvényében, és minden részhalmazból egy bemenetet ellenőrizhetünk Pl. egy téglalap méretei egész számok, amelyek lehetnek negatívak, amely nem megengedett tartomány nulla, amely megengedhető (üres téglalap) pozitívak, amelyek megengedettek, ugyanakkor speciális esetet jelenthetnek a nagy számok Az egységtesztet az ismétlések és a számos kombináció miatt célszerű automatizálni (pl. a teszt implementációjával) 12

Tesztelési keretrendszerek Az egységtesztek automatizálását, és az eredmények kiértékelését hatékonyabbá tehetjük tesztelési keretrendszerek (unit testing frameworks) használatával általában a tényleges főprogramoktól függetlenül építhetünk teszteseteket, amelyeket futtathatunk, és megkapjuk a futás pontos eredményét a tesztesetekben egy, vagy több ellenőrzés (assert) kap helyet, amelyek jelezhetnek hibákat amennyiben egy hibajelzést sem kaptunk egy tesztesettől, akkor az eset sikeres (pass), egyébként sikertelen (fail) pl. JUnit, CppTest, QTestLib 13

Tesztelési keretrendszerek TestSuit Object Tester loop testcase() execute() assert() alt [test succeeded] [test failed] pass() fail() 14

Kód lefedettség A tesztgyűjtemények által letesztelt programkód mértékét nevezzük kód lefedettségnek (code coverage) megadja, hogy a tényleges programkód mely részei kerültek végrehajtásra a teszt során számos szempont szerint mérhető, pl. alprogram (function): mely alprogramok lettek végrehajtva utasítás (statement): mely utasítások lettek végrehajtva elágazás (branch): az elágazások mely ágai futottak le feltételek (condition): a logikai kifejezések mely részei lettek kiértékelve (mindkét esetre) 15

További tesztek Az integrációs és rendszertesztek során elsősorban azt vizsgáljuk, hogy a rendszer megfelel-e a követelménybeli elvárásoknak funkcionális és nem funkcionális alapon (pl. teljesítmény, biztonság) is ellenőrizhetjük a rendszert ezeket a teszteseteket már a specifikáció során megadhatjuk a tesztelés első lépése a füst teszt (smoke test), amely során a legalapvetőbb funkciók működését ellenőrzik A kiadásteszt és a felhasználói teszt során a szoftvernek már általában a célkörnyezetben, tényleges adatokkal kell dolgoznia a teszt magába foglalja a kihelyezést (pl. telepítés) is 16

Programváltozatok Az implementáció és tesztelés során a szoftver különböző változatait tartjuk nyilván: pre-alfa: funkcionálisan nem teljes, de rendszertesztre alkalmas alfa: funkcionálisan teljes, de a minőségi mutatókat nem teljesíti béta: funkcionálisan teljes, és a minőségi mutatók javarészt megfelelnek a követelményeknek a további tesztelés során nagyrészt a rendellenességek kiküszöbölése folyik, a tesztelés lehet publikus esetlegesen kiegészítő funkciók kerülhetnek implementálásra 17

Programváltozatok kiadásra jelölt (release candidate, RC), vagy gamma: funkcionálisan teljes, minőségi mutatóknak megfelelő kódteljes (nem kerül hozzá újabb programkód, legfeljebb hibajavítás) csak dinamikus tesztelés folyik, és csak kritikus hiba esetén nem kerül gyártásra végleges (final, release to manufacturing, RTM): a kiadott, legyártott változat nyílt forráskód esetén általában már korábban publikussá válik a (félkész) szoftver a kiadást követően a program további változásokon eshet át (javítások, programfunkció bővítés) 18

Teljesítménytesztek A teljesítménytesztek (performance test) során a rendszer teljesítményét mérjük ezáltal a rendszer megbízhatóságát és teljesítőképességének (válaszidők, átviteli sebességek, erőforrások felhasználása) ellenőrizzük különböző mértékű feladatvégzés esetén végezhetünk teszteket a várható feladatmennyiség függvényében (load test), vagy azon túl ellenőrizhetjük a rendszer tűrőképességét (stress test) a teljesítmény tesztet sokszor a hardver erőforrások függvényében végezzük, amellyel megállapítható a rendszer skálázhatósága (capacity test) 19

Tesztvezérelt fejlesztés A tesztvezérelt fejlesztés (test-driven development, TDD) egy olyan fejlesztési módszertan, amely a teszteknek ad elsőbbséget a fejlesztés során a fejlesztés lépései: 1. tesztesetek elkészítése, amely ellenőrzi az elkészítendő kód működését 2. az implementáció megvalósítása, amely eleget tesz a teszteset ellenőrzéseinek 3. az implementáció finomítása a minőségi elvárásoknak (tervezési és fejlesztési elvek) megfelelően előnye, hogy magas fokú a kód lefedettsége, mivel a teszteknek minden funkcióra ki kell térniük 20

Tesztvezérelt fejlesztés tesztesetek létrehozása programegység véglegesítése programegység implementálása [finomítás szükséges] [a minőség megfelelő] [sikertelen] programegység tesztelése kódminőség ellenőrzése [sikeres] 21

Követelmények Tervezés Implementáció Tesztelés Üzemeltetés A hibajavítás költségei Hiba felfedezésének helye A hibajavítás költsége a hiba felfedezésének helye (ideje) függvényében Hiba helye Követelmények 1x 3x 5-10x 10x 10-100x Tervezés 1x 10x 15x 25-100x Implementáció 1x 10x 10-25x 22

Egységtesztelés A legalacsonyabb szintű, a programot felépítő egységek tesztelése Egység: egy rendszer legkisebb önálló egységként tesztelhető része. Egység tesztekkel ellenőrizhető, hogy egy egység az elvárásoknak megfelelően működik. Egy egység függvényeiről ellenőrizzük, hogy különböző bemenetek esetén megfelelő eredményt, vagy hibát produkálnak. Az egységeket egymástól függetlenítve kell tesztelni. 23

Egységtesztelés Előnyök A hibák sokkal korábban észlelhetőek Minden komponens legalább egyszer tesztelt Az egységek elkülönítése miatt a hibák helyének meghatározása könnyű A funkciók könnyen módosíthatóak, átalakíthatók Dokumentációs szerep: példákat biztosít egyes funkciók használatára 24

Egységtesztelés Elvek Gyors: Független: Megismételhető: Önellenőrző: Automatikus: A teszteknek gyorsan kell futnia, lassú teszteket senki nem futtatja gyakran, így a hibák nem derülnek ki idejében. A teszteknek egymástól függetlennek és bármilyen sorrendben végrehajthatónak kell lennie. A teszteknek bármilyen környezetben, hálózat nélkül is végrehajthatónak kell lennie. A különböző futtatások eredményének meg kell egyeznie. A tesztek eredménye egy logikai érték (futásuk vagy sikeres, vagy sikertelen) Automatikusan, interakció nélkül futó tesztek 25

Egységtesztelés Mit kell tesztelni? Egy osztály minden publikus metódusát tesztelni kell Triviális eseteket Speciális eseteket Pl.: számok esetén: negatív, 0, pozitív, a megengedettnél kisebb, nagyobb, Pozitív / Negatív teszteseteket A negatív teszteset szándékosan hibás paraméterekkel hívja a tesztelt metódust, célja a hibakezelés ellenőrzése Végrehajtási lefedettség: a tesztekből indított hívásoknak a tesztelt metódus lehető legtöbb során végig kell haladnia. Egy teszt egyetlen dolog 26

Egységtesztelés Mit NEM kell tesztelni? Ami nyilvánvalóan működik külső lib-ek, JDK, JRE, Adatbázis feltételezhető, hogy ha elérhető, akkor helyesen működik Triviális metódusok getter / setter GUI a felhasználó felület nem tartalmazhat üzleti logikát 27

Egységtesztelés JUnit 4.x A JUnit egy egységtesztelő keretrendszer a Java nyelvhez Annotációkkal konfigurálható. Elvárt eredmények ellenőrzése Assert-ekkel. public class MyTests { @Test public void multiplicationofzerointegersshouldreturnzero() { // MyClass is tested MyClass tester = new MyClass(); // assert statements assertequals("10 x 0 must be 0", 0, tester.multiply(10, 0)); assertequals("0 x 10 must be 0", 0, tester.multiply( 0, 10)); assertequals("0 x 0 must be 0", 0, tester.multiply( 0, 0)); } } 28

Egységtesztelés Teszt osztály felépítése Annotáció @Test public void method() @Test(expected = Exception.class) @Test(timeout = 100) @Before / @After public void method() @BeforeClass / @AfterClass public static void method() Eredmény Teszt metódus jelölése A teszt sikertelen a megadott típusú kivétel hiányában A teszt sikertelen, ha a metódus nem fejeződik be adott idő alatt Metódus amely minden teszt előtt/után lefut Egyszer fut le az osztályban lévő első teszt metódus indulása előtt/után @Ignore / @Ignore("Why disabled") A teszt metódus kihagyása 29

Egységtesztelés Ellenőrzések, Assert-ek Utasítás fail(message) asserttrue([message,] boolean condition) vagy assertfalse( ) Leírás A hívó teszt sikertelen futását eredményezi Ellenőrzi, hogy a megadott feltétel igaz (hamis) e. assertequals([message,] expected, actual) assertnull([message,] obj) vagy assertnotnull( ) Ellenőrzi, hogy két objektum egyenlő-e. Az objektum null (nem null). assertsame([message,] expected, actual) vagy assertnotsame( ) Ellenőrzi, hogy két változó ugyanarra az objektumra mutat ( == /!= ) 30

Egységtesztelés Kivételkezelés ellenőrzése A @Test(expected = Exception.class) annotáció limitált, csak egyetlen kivételt tud tesztelni. Alternatíva try { mustthrowexception(); fail(); } catch (Exception e) { // expected } 31

Egységtesztelés Példa public class MyClass{ public int multiply(int x, int y) { if (x > 999) { throw new IllegalArgumentException(); } return x / y; } } public class MyClassTest { @Test(expected = IllegalArgumentException.class) public void testexceptionisthrown(){ } MyClass m = new MyClass(); m.multiply(1000, 5); @Test public void testmultiply() { MyClass m = new MyClass(); assertequals(50,m.multiply(10,5)); } } 32

Egységtesztelés Mock A tesztelt metódusok általában más komponens nyújtotta szolgáltatásokat is használnak Az egyes funkciókat más komponensektől izoláltan kell tesztelnünk, a tesztek sikeressége nem függhet a függőségek helyes implementációjától A Mock egy olyan objektum, amely egy másik objektum működését szimulálja Egy osztály függőségeinek szimulálására használandó http://easymock.org/ 33

Egységtesztelés Mock példa public interface ValidatorService { boolean allowedtorent(member m, int numberofbookstorent); } public class RentalController { private ValidatorService validatorservice; public RentalController(ValidatorService validatorservice) { this.validatorservice = validatorservice; } } public void rent(member m, List<Book> books) { if(!validatorservice.allowedtorent(m, books.size()) { throw new ValidationException(); }... } 34

Egységtesztelés Mock példa folytatás public class RentalControllerTest { private ValidatorService validatorservice; private RentalController controller; @Before public void setup() throws Exception { } // NiceMocks return default values for unimplemented methods validatorservice = createnicemock(validatorservice.class); controller = new RentalController(validatorService); @Test(expected = ValidationException.class) public void testrentmorethanallowed(); Member m = new Member(); List<Books> books = new ArrayList<>(); expect(validatorservice.allowedtorent(m, books)).andreturn(false).times(1); } } replay(validatorservice); controller.rent(m, books); 35