jsf anwendungen testen mit acceptit
DESCRIPTION
Das Testen von JSF Anwendungen ist notwendig, aber nicht einfach. In diesem Vortrag motivieren wir zunächst, warum unserer Meinung nach Tests unerlässlich sind. Dann zeigen wir ein einfaches kleines CDI-basiertes Framework, namens AcceptIt, welches uns bei der Erstellung von Integrationstests für JSF-Anwendungen hilft.TRANSCRIPT
![Page 1: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/1.jpg)
JSF-Anwendungen testen mit AcceptITinterner Vortrag in der akquinet tech@spree
![Page 2: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/2.jpg)
Schreibt mehr gute !End-to-End Tests!
![Page 3: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/3.jpg)
Routinearbeit• d.h.:
gutes Verständnis der Anforderung!
• Top Down Entwurf => bessere Architektur!
• End-To-End = Top Down
s. http://www.sigs.de/download/oop_09/Dirbach%20NEU.pdf
![Page 4: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/4.jpg)
Wissensarbeit• d.h.:
Problem und Lösungsind noch unklar!
• ständiger Wechsel zwischen Problem- und Lösungsraum!
• End-To-End =>Konzentration aufWas und Warum
![Page 5: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/5.jpg)
Beispiel: WSDL, SOAP & Exceptions
![Page 6: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/6.jpg)
Erfahrungswerte aus einem Integrationsprojekt• Aufgabe:
Integration eines SOAP-basierten Webdienst!
• Erkenntnisse!
• Standardverhalten war einfach!
• korrektes Verhalten in Randfällen nicht!
• End-To-End als effizientes Entwicklungsinstrument
![Page 7: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/7.jpg)
Weboberflächen und ihre Logikanteile
![Page 8: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/8.jpg)
Testabdeckung eines JSF-Projekts
• größtes Modul hat geringste Testabdeckung mit Unit-Tests!
• Grund: JSF-Integration erschwert Isolation für Unit-Test
15,4%
![Page 9: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/9.jpg)
XHTML: 20k LOC :=
20kLOC GUI-Logik
![Page 10: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/10.jpg)
XHTML: 20k LOCCoverage?
![Page 11: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/11.jpg)
Unit Test
Object Under TestPro:!- schnell!- validiert API-Entwurf
Contra:!- wenig Aussage über Systems!- robuste Testssuite kann schwierig sein
![Page 12: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/12.jpg)
Unit Under Test + 3rd party Code
Integrations Test
Pro:!- validiert Teilsysteme
Contra:!- herausfordernder Schnitt der Teilsysteme
![Page 13: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/13.jpg)
System Under Test
End to End Test
Pro:!- Hohe Aussage über System!- Entkopplung von Test und Systemcode
Contra:!- Aufwand!!=> Notwendigkeit einer guten Testarchitektur
![Page 14: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/14.jpg)
Nutze die Macht der Tests, Luke!
![Page 15: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/15.jpg)
Willkommen in der ersten Klasse!
![Page 16: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/16.jpg)
Tests als1st Class Citizen
• gleiche Anforderungen an Testcode wie an Produktivcode, insb. bzgl.!
• Wartbarkeit!
• Verständlichkeit!
• Tests => Aufwand => Investition!
• Abwesenheit von Tests := Wette, dass Software fehlerfrei ist und nicht weiterentwickelt wird… => mutig
![Page 17: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/17.jpg)
AcceptIt Ein Vorgeschmack
![Page 18: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/18.jpg)
public!class!SampleTest!{!!
!!!!@Rule!!!!!public!final!AcceptItRule!acceptItRule!=!!
!!!new!AcceptItRule();!!
!!!!@Inject!!!!!TestBean!testBean;6!
!!!!@Test!!!!!public!void!canInjectSimpleBean()!{!!!!!!!!!assertThat(testBean).isNotNull();!!!!!}6}
![Page 19: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/19.jpg)
Guiceberry vs. AcceptIt
• Injection mit Guice!
• TestScope
• Injection mit CDI!
• TestScope!
• InjectionPoint
![Page 20: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/20.jpg)
Herausforderungen beim Testen von Webanwendungen
![Page 21: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/21.jpg)
driver.findElement(By.id("q")).sendKeys(text);
![Page 22: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/22.jpg)
driver.findElement(By.id("q")).sendKeys(text);
Finden
![Page 23: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/23.jpg)
Finden
wait.until(ExpectedConditions.titleIs("Google"));
driver.findElement(By.id("q")).sendKeys(text);
![Page 24: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/24.jpg)
Finden
wait.until(ExpectedConditions.titleIs("Google"));
driver.findElement(By.id("q")).sendKeys(text);
Wartenund
![Page 25: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/25.jpg)
Das war …. Spagetthi-Code
![Page 26: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/26.jpg)
Anwendung
Page Object
Test
WebDriver
Browser
![Page 27: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/27.jpg)
Anwendung
Page Object
Test
WebDriver
Browser
![Page 28: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/28.jpg)
Anwendung
Page Object
Test
WebDriver
Browser
Fernsteuern des Browser
![Page 29: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/29.jpg)
Anwendung
Page Object
Test
WebDriver
Browser
alle fachlichen Operationen einer Seite
![Page 30: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/30.jpg)
@PageObject!public!class!GooglePage!{!!!!!!@Inject!!!!!private!WebDriver!driver;!!!!!!@FindBy(name!=!"q")!!!!!private!WebElement!searchField;6!
public6void6search(String6in)6{}6}
![Page 31: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/31.jpg)
Anwendung
Page Object
Test
WebDriver
Browser
fachliche Tests.
![Page 32: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/32.jpg)
!!!!@Inject!!!!!GooglePage!googlePage;!!!!!!!!@Test!!!!!public!void!canSearchForAkquinet()!{!!!!!!!!!googlePage.get();!!!!!!!!!googlePage.search("akquinet.de");!!!!!!!!!!assertThat(googlePage.getSearchResults())6
66.contains("akquinet!AG");!!!!!}
=> Fokus auf Fachlichkeit, keine direkte Interaktion mit WebDriver
![Page 33: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/33.jpg)
Ein Beispielprojekt
Chuck
Nor
ris
Appro
ved
90%
![Page 34: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/34.jpg)
Try!
![Page 35: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/35.jpg)
Als Dessert: Der Mehrwert zu Guiceberry
![Page 36: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/36.jpg)
Anwendung
Page Object
Test
WebDriver
BrowserWiederverwendung!
Page Atom
![Page 37: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/37.jpg)
@PageObjectAtom!public!class!SearchFieldUsingWebElement!{!!!!!!@Inject!!!!!WebElement!searchField;!!!!!!public!void!search(String!query)!{!!!!!!!!!searchField.sendKeys(query);!!!!!!!!!searchField.submit();!!!!!}!}
![Page 38: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/38.jpg)
@PageObjectAtom!public!class!SearchFieldUsingWebElement!{!!!!!!@Inject!!!!!WebElement!searchField;!!!!!!public!void!search(String!query)!{!!!!!!!!!searchField.sendKeys(query);!!!!!!!!!searchField.submit();!!!!!}!}
!@Inject!!@FindBy(name!=!"q")!!private!SearchFieldUsingWebElement!search;!
![Page 39: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/39.jpg)
@PageObjectAtom!public!class!SearchFieldUsingWebElement!{!!!!!!@Inject!!!!!WebElement!searchField;!!!!!!public!void!search(String!query)!{!!!!!!!!!searchField.sendKeys(query);!!!!!!!!!searchField.submit();!!!!!}!}
!@Inject!!@FindBy(name!=!"q")!!private!SearchFieldUsingWebElement!search;!
![Page 40: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/40.jpg)
Conversion!
![Page 41: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/41.jpg)
Aus der Praxis
![Page 42: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/42.jpg)
Die Situation
![Page 43: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/43.jpg)
Das Ziel
![Page 44: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/44.jpg)
Wie verspeist man einen Elefanten?
![Page 45: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/45.jpg)
Stück für Stück
![Page 46: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/46.jpg)
Die Charakeristik der Pferde
![Page 47: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/47.jpg)
@Test6public6void6navigiereZurNiederlassung()6{6666homePage.get();6!666ClientAgenciesListPage6ger6=66666666homePage.niederlassung("Deutschland");666666assertThat(ger.getNiederlassungen())666666666.hasSize(22)666666666.haveExactly(1,6sc("KUNDE!GmbH!Sylt"))666666666.haveExactly(1,6sc("KUNDE!xyz"))666666666;6}6
![Page 48: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/48.jpg)
![Page 49: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/49.jpg)
![Page 50: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/50.jpg)
![Page 51: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/51.jpg)
![Page 52: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/52.jpg)
http://www.sigs.de/download/oop_09/Dirbach%20NEU.pdf
![Page 53: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/53.jpg)
![Page 54: JSF Anwendungen testen mit AcceptIt](https://reader034.vdocuments.us/reader034/viewer/2022052412/558c62ddd8b42a016c8b45cd/html5/thumbnails/54.jpg)