Budapest University of Technology and Economics Fault-tolerant Systems Research Group Eclipse alapú technológiák Plug-in fejlesztés teszteléssel Balogh András
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 2 JUnit Regressziós teszt keretrendszer Erich Gamma és Kent Beck írta Unit tesztelésre használatos Java-ban Nyílt forráskódú IBM CPL licensz alatt elérhető
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 3 JUnit Web: Az Eclipse tartalmazza a JUnit-ot −GUI-t is kínál a tesztek futtatásához Eclipse-n kívül is futtathatóak a tesztek
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 4 Eclipse - JUnit A JUnit beállítása a Preferences ablakban lehetséges Általában jók az alapbeállítások Szűrőket lehet megadni, hogy mely csomagok és osztályok jelenjenek meg a stack trace-ben
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 5 TestCase - teszteset Több tesztet is futtathat A TestCase osztályból származik Definiálja, hogy mely tagváltozók tartalmazzák a teszt állapotát az osztályon belül Inicializálás a setUp metódussal Takarítás a tearDown metódussal
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 6 TestCase készítése Csináljunk egy új osztályt a project-ben Adjuk hozzá a junit.jar-t a függőségekhez
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 7 TestCase létrehozása Kiválasztjuk a csomagot, ahova a tesztet rakni szeretnénk A new menüből válasszuk a JUnit Test Case-t. Elnevezzük, stb. Egy megfelelő osztály létrejön
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 8 Példa: TestCase package com.espirity.course.testing; import junit.framework.TestCase; public class FirstTestCase extends TestCase { public FirstTestCase(String arg0) { super(arg0); } public static void main(String[] args) { } protected void setUp() throws Exception { super.setUp(); } protected void tearDown() throws Exception { super.tearDown(); }
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 9 TestCase létrehozása Minden „test”-tel kezdődő metódus tesztként lesz kezelve az osztályban −Sok teszt metódusunk lehet Minden teszt metódus többféle „assert” metódust használhat, hogy a tesztelés alatt álló osztályok állapotát vizsgálja −Az assert metódusok öröklöttek
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 10 TestCase létrehozása Assert −assertEqual(x,y) −assertFalse(boolean) −assertTrue(boolean) −assertNull(Object) −assertNotNull(Object) −asserSame(Object,Object) −assertNotSame(Object,Object)
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 11 Példa: TestCase package testing; import junit.framework.TestCase; public class FirstTestCase extends TestCase { public FirstTestCase(String arg0) { super(arg0); } public static void main(String[] args) {} protected void setUp() throws Exception { super.setUp(); } protected void tearDown() throws Exception { super.tearDown(); } public void testCompareSucceed() { assertEquals(0, 0); //this assertion will succeed } public void testCompareFail() { assertEquals(0, 1); //this assertion will fail }}
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 12 TestCase futtatása Válasszuk ki az osztályt Run -> Run as - > JUnit Test Lefutnak a tesztek Az eredmény a JUnit view-ban jelenik meg.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 13 JUnit view Információk −Piros/zöld a teszt eredménye hiba/ok −Látható a meghiúsult tesztek neve −Látható a hiba trace −Látható a lefutott tesztek száma −Látható a hibák száma
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 14 TestSuite Több TestCase vagy Suite futtatása A TestSuite osztályból örököltetjük Létrehozás varázslóval… −File->New->Other…->Java->JUnit −A varázslóban válasszuk a JUnit Test Suite opciót −Megadhatjuk a résztevő Case-eket
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 15 Példa: TestSuite package com.espirity.course.testing; import junit.framework.Test; public class AllInclusiveTestSuite { public static Test suite() { TestSuite suite = new TestSuite("Test for com.espirity.course.testing"); //$JUnit-BEGIN$ suite.addTestSuite(FirstTestCase.class)); suite.addTestSuite(SecondTestCase.class)); //$JUnit-END$ return suite; }
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 16 TestSuite futtatás Hasonló a TestCase-éhez Minden megadott TestCase lefut A JUnit ablak tartalmazza az eredményeket Fontos: TestSuite is adható TestSuite-hoz!
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 17 PDE JUnit JUnit támogatás plug-in fejlesztéshez A sima JUnit nem használható −Nem Workbench-ben fut −Az Eclipse plug-inok nem leérhetőek PDE JUnit −Külön futtatási mód
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 18 Plugin futtatás Alap Eclipse, ezen dolgozunk
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 19 Plugin futtatás Projectek a workbench- ben
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 20 Plugin futtatás Ha plugint futtatunk egyúj Eclipse példány indul
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 21 Plugin futtatás Betöltődik a plugin-unk
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 22 Plugin futtatás Külön workspace látszik
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 23 Plugin teszt futtatás Teszt projekt a workspace-ben
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 24 Plugin teszt futtatás A teszt is betöltődik, valamint a teszt futtató
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 25 PDE JUnit működés Írunk egy tesztet (ugyanúgy, mint alapesetben) Futtatjuk JUnit Plug-in Test-ként Egy Eclipse ablak nyílik, majd a tesztek lefutása után bezáródik A teszteredményt a szokásos ablakban találhatjuk meg
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 26 PDE JUnit működés Hol legyenek a tesztek? −Lehet a tesztelendő plug-inban is −De! ●A JUnit függőségeket be kell építeni ●Keveredik a kód és a teszt −Tegyük külön plug-inba, ami könnyen leválasztható ●Ez függ az eredeti plug-in-től
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 27 Mit teszteljünk? Nyilván csak a meghajtható részek (API) tesztelhető Nincs lehetőség közvetlen GUI tesztre −Rational Robot Amit tesztelni szeretnénk, látható kell legyen Erősen függ a konkrét plug-intól
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 28 Gyakori kiterjesztések
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 29 View Általános információ-megjelenítő elem Extension point: −org.eclipse.ui.views −If: IViewPart Sokféle lehetőség van információ megjelenítésére −Tartalmazhat SWT és JFace elemeket is
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 30 Példa: View public class View extends ViewPart { public static final String ID = "raktarAppFrontend.view"; private TreeViewer viewer; public void createPartControl(Composite parent) { //View controls initialization } /** * Passing the focus request to the viewer's control. */ public void setFocus() { viewer.getControl().setFocus(); }
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 31 View setFocus metódus −Hova kerüljön a fókusz? −Nekünk kell megmondani… −Program to API contract rule: „Check and program to the Eclipse API contract.” −Ezt a metódust nekünk nem szabad hívni! −Helyette: IWorkbenchPage.showView(String) −És: IWorkbenchPage.activate(IViewPart)
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 32 View Általános információ-megjelenítő elem Extension point: −org.eclipse.ui.views −If: IViewPart Sokféle lehetőség van információ megjelenítésére −Tartalmazhat SWT és JFace elemeket is
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 33 Menü elemek Pop-up menü: ActionSet-ek (már volt) Context Menü −Jobbgombra előugró menü egy adott elemen −Invitation rule-> általában mindegyik context menü fogad új elemeket −Elemek: Action-ök, separator-ok −Két speciális elem, amik közé mások menü elemei kerülhetnek (MB_ADDITIONS) −Hozzáadás: org.eclipse.ui.popupMenus ●A View megadásával
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 34 Perspektívák Layot-ot definiál a megjelenítendő view-k és editorok számára Pl. Java/Debug/Resource perspektívák Perspektíva kiegészítése −Megadható hol jelenjen meg a view, ha megnyitják −Kezdetben látható legyen a view? RCP alkalmazásoknál teljesen új perspektívát készítünk! (programozottan)
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 35 Help Minden plugin tartalmazhat help-et Alapelem: TOC – Table of contents −Fa −Más toc-okat és topic-okat tartalmaz Topic −Egy html fájl Extension point: org.eclipse.help.toc Lehet különálló plugin (nem keveredik a kóddal)
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 36 Help készítése A fő toc: toc.xml-ben (konvenció) …
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 37 Help Topic elemek −Van címkéjük −Van egy fájl hivatkozás a tartalmukra −Ha a címkét kiválasztjuk, betöltődik a megadott fájl −A HTML minden elemet tartalmazhat, amit általában (képek, linkek, …)
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 38 Help – plugin.xml …
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 39 Integrált Help Topic hozzáadása létező help-hez Pl. határtalan tudásunkkal gyarapítni szeretnénk a beépített PDE súgót Anchorok helyezhetőek el a toc-ban (invitation rule) Toc link_to attribútum -> útvonal a toc gyökeréhez (az anchorhoz) Példa:
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 40 Context sensitive help „F1” szindróma Hozzárendelés: −WorkbenchHelp.setHelp(Control,String) Help context extension: −Egy xml fájl, ami leírja a context-eket (mely topicok jelennek meg, …) + egy description (általános szöveg) −Ezt az xml-t mint org.eclipse.help.context extension-t kell bejegyezni
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 41 Internationalization A plug-inok nemzetközivé tétele, többnyelvűsítése Első lépésben eltávolítjuk a string konstansokat a kódból és egyéb fájlokból, hogy könnyen cserélhető legyen a felület szövege
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 42 I18N – plugin.xml A plugin.xml egyes szövegei csak a rendszer számára láthatóak (extension id, …) ezeket nem kell lefordítani Másokat viszont a felhasználó is lát (action label) – ezeket ki kell szedni, hogy könnyen le lehessen fordítani −plugin.properties – név érték párok −%név – az adott helyre behelyettesíti a talált értéket feature.xml-nél hasonló módszer (feature.properties)
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 43 I18N – forráskód A Java forráskód egy része felhasználó számára látható szöveget tartalmaz (gombfelirat, üzenetek…) – ezeket ki kellene szedni… Más stringek viszont fontos rendszer- konstansokat tartalmaznak (id, …) – ezekenek maradni kell Megoldás: megjelöljük a maradókat: //$NON-NLS-1$
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 44 I18N – forráskód Előkészületek: −Resource bundle létrehozása a plug-in-hoz (akrá több is) −Minden bundle-be rakjunk egy properties fájlt (pl. messages.properties), és egy helper osztályt, mely ezt betölti −A kulcsok legyenek kvalifikáltak, hogy ne legyen ütközés (pl. Osztaly.elem.attributum)
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 45 Eclipse támogatás Source -> Externalize strings −Megkeresi a stringeket, létrehozza a bundle-t és a beolvasó segédosztályt. −Mindent elrendez nekünk
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 46 Probléma - publikálás Mit tegyünk a plugin publikálásakor? Várjuk meg az összes fordítást? – időveszteség Adjunk ki új verziót minden fordításkor? – bonyolult Megoldás: fragment-ek − Külön elemek, melyek a plugin egy részét tartalmazzák – nyelv vagy platform specifikus elemekhez találták ki
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 47 Accessibility A plugin legyen elérhető hátrányos helyzetűek számára is −Minden funkció legyen elérhető billentyűzetről −Az elemekhez rendeljünk cimkéket, hogy a felolvasó programok számára legyen elégéséges információ −A színeket csak mint kiterjesztést használjuk −Tegyük lehetővé erős kontrasztos üzemmód használatát −A hangjelzések és kép legyen kiváltható
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 48 A plugin megnyitása más programozók számára API definiálása −Meg kell határrozni, mely interfészek, osztályok látszanak, melyeket kell másoknak használni −Csak a szükségeseket exportáljuk −Az exportán megadhatunk egy prefixet is az osztálynevekre -> teljesítmény!
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 49 Belső és nyilvános csomagok Explicit API rule: „Separate the API from internals” −Lehetőleg világosan el legyen választva a nyilvános API és a belső osztályok (pl. külön csomag) Stability rule: „Once you invite others to contribute, don’t change the rules” −Lehetőleg tartsuk stabilan az API-t Defensive API rule: „Reveal only the API in which you have confidence, but be prepared to reveal more API as clients ask for it.” −Csak a stabil részeket mutassuk meg
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 50 Core és UI A nagy komponensek általában külön plug-inbe helyezik a belső működést és az UI-t Ez praktikus, és kikényszeríti a kettő közötti interfész definiálását −Könnyen cserélhető, kiegészíthető GUI −Külön-külön fejleszthető elemek
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 51 Extension point A hivatalos kiegészítési mechanizmus alapeleme Fontos, hogy definiáljunk hozzá megfelelő sémát! −Ez adja meg a használható elemeket