JSF-Anwendungen
testen mit AcceptIT
internerVortrag in der akquinet tech@spree
Schreibt mehr gute !
End-to-End Tests!
Routinearbeit
• d.h.: 

gutesVerständnis der 

Anforderung!
• Top Down Entwurf 

=> bessere Architektur!
• End-To-End = To...
Wissensarbeit
• d.h.:

Problem und Lösung

sind noch unklar!
• ständiger Wechsel 

zwischen Problem-

und Lösungsraum!
• E...
Beispiel: WSDL,
SOAP & Exceptions
Erfahrungswerte aus
einem Integrationsprojekt
• Aufgabe:

Integration eines SOAP-basierten Webdienst!
• Erkenntnisse!
• St...
Weboberflächen
und ihre Logikanteile
Testabdeckung eines
JSF-Projekts
• größtes Modul hat
geringste
Testabdeckung mit
Unit-Tests!
• Grund:

JSF-Integration
ers...
XHTML: 20k LOC
:=
20kLOC GUI-Logik
XHTML: 20k LOC
Coverage?
Unit Test
Object Under TestPro:!
- schnell!
- validiert API-Entwurf

Contra:!
- wenig Aussage über Systems!
- robuste Test...
Unit Under Test
+ 3rd party Code
Integrations Test
Pro:!
- validiert Teilsysteme

Contra:!
- herausfordernder Schnitt der ...
System Under Test
End to End Test
Pro:!
- Hohe Aussage über System!
- Entkopplung von Test und Systemcode

Contra:!
- Aufw...
Nutze die Macht
der Tests, Luke!
Willkommen in der ersten Klasse!
Tests als

1st Class Citizen
• gleiche Anforderungen an Testcode wie an
Produktivcode, insb. bzgl.!
• Wartbarkeit!
• Verst...
AcceptIt
Ein Vorgeschmack
public!class!SampleTest!{!
!
!!!!@Rule!
!!!!public!final!AcceptItRule!acceptItRule!=!!
!!!new!AcceptItRule();!
!
!!!!@Inje...
Guiceberry vs. AcceptIt
• Injection

mit Guice!
• TestScope

• Injection

mit CDI!
• TestScope!
• InjectionPoint

Herausforderungen beim
Testen von Webanwendungen
   
driver.findElement(By.id("q")).sendKeys(text);
   
driver.findElement(By.id("q")).sendKeys(text);
Finden
Finden
wait.until(ExpectedConditions.titleIs("Google"));
   
driver.findElement(By.id("q")).sendKeys(text);
Finden
wait.until(ExpectedConditions.titleIs("Google"));
   
driver.findElement(By.id("q")).sendKeys(text);
Wartenund
Das war ….
Spagetthi-Code
Anwendung
Page Object
Test
WebDriver
Browser
Anwendung
Page Object
Test
WebDriver
Browser
Anwendung
Page Object
Test
WebDriver
Browser
Fernsteuern des Browser
Anwendung
Page Object
Test
WebDriver
Browser
alle fachlichen Operationen
einer Seite
@PageObject!
public!class!GooglePage!{!
!
!!!!@Inject!
!!!!private!WebDriver!driver;!
!
!!!!@FindBy(name!=!"q")!
!!!!priva...
Anwendung
Page Object
Test
WebDriver
Browser
fachliche Tests.
!!!!@Inject!
!!!!GooglePage!googlePage;!
!!!
!!!!@Test!
!!!!public!void!canSearchForAkquinet()!{!
!!!!!!!!googlePage.get()...
Ein Beispielprojekt
Chuck
Norris
Approved
90%
Try!
Als Dessert:
Der Mehrwert zu Guiceberry
Anwendung
Page Object
Test
WebDriver
Browser
Wiederverwendung!
Page Atom
@PageObjectAtom!
public!class!SearchFieldUsingWebElement!{!
!
!!!!@Inject!
!!!!WebElement!searchField;!
!
!!!!public!void!...
@PageObjectAtom!
public!class!SearchFieldUsingWebElement!{!
!
!!!!@Inject!
!!!!WebElement!searchField;!
!
!!!!public!void!...
@PageObjectAtom!
public!class!SearchFieldUsingWebElement!{!
!
!!!!@Inject!
!!!!WebElement!searchField;!
!
!!!!public!void!...
Conversion!
Aus der
Praxis
Die Situation
Das Ziel
Wie verspeist man
einen Elefanten?
Stück für
Stück
Die Charakeristik
der Pferde
@Test6
public6void6navigiereZurNiederlassung()6{6
666homePage.get();6
!
666ClientAgenciesListPage6ger6=66
666666homePage.n...
http://www.sigs.de/download/
oop_09/Dirbach%20NEU.pdf
JSF Anwendungen testen mit AcceptIt
JSF Anwendungen testen mit AcceptIt
JSF Anwendungen testen mit AcceptIt
JSF Anwendungen testen mit AcceptIt
JSF Anwendungen testen mit AcceptIt
JSF Anwendungen testen mit AcceptIt
Nächste SlideShare
Wird geladen in …5
×

JSF Anwendungen testen mit AcceptIt

539 Aufrufe

Veröffentlicht am

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.

Veröffentlicht in: Software
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
539
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
2
Aktionen
Geteilt
0
Downloads
1
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

JSF Anwendungen testen mit AcceptIt

  1. 1. JSF-Anwendungen testen mit AcceptIT internerVortrag in der akquinet tech@spree
  2. 2. Schreibt mehr gute ! End-to-End Tests!
  3. 3. Routinearbeit • d.h.: 
 gutesVerständnis der 
 Anforderung! • Top Down Entwurf 
 => bessere Architektur! • End-To-End = Top Down s. http://www.sigs.de/download/oop_09/Dirbach%20NEU.pdf
  4. 4. Wissensarbeit • d.h.:
 Problem und Lösung
 sind noch unklar! • ständiger Wechsel 
 zwischen Problem-
 und Lösungsraum! • End-To-End =>
 Konzentration auf
 Was und Warum
  5. 5. Beispiel: WSDL, SOAP & Exceptions
  6. 6. Erfahrungswerte aus einem Integrationsprojekt • Aufgabe:
 Integration eines SOAP-basierten Webdienst! • Erkenntnisse! • Standardverhalten war einfach! • korrektesVerhalten in Randfällen nicht! • End-To-End als effizientes Entwicklungsinstrument
  7. 7. Weboberflächen und ihre Logikanteile
  8. 8. Testabdeckung eines JSF-Projekts • größtes Modul hat geringste Testabdeckung mit Unit-Tests! • Grund:
 JSF-Integration erschwert Isolation für Unit-Test 15,4%
  9. 9. XHTML: 20k LOC := 20kLOC GUI-Logik
  10. 10. XHTML: 20k LOC Coverage?
  11. 11. Unit Test Object Under TestPro:! - schnell! - validiert API-Entwurf
 Contra:! - wenig Aussage über Systems! - robuste Testssuite kann schwierig sein
  12. 12. Unit Under Test + 3rd party Code Integrations Test Pro:! - validiert Teilsysteme
 Contra:! - herausfordernder Schnitt der Teilsysteme
  13. 13. System Under Test End to End Test Pro:! - Hohe Aussage über System! - Entkopplung von Test und Systemcode
 Contra:! - Aufwand! ! => Notwendigkeit einer guten Testarchitektur
  14. 14. Nutze die Macht der Tests, Luke!
  15. 15. Willkommen in der ersten Klasse!
  16. 16. Tests als
 1st 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
  17. 17. AcceptIt Ein Vorgeschmack
  18. 18. public!class!SampleTest!{! ! !!!!@Rule! !!!!public!final!AcceptItRule!acceptItRule!=!! !!!new!AcceptItRule();! ! !!!!@Inject! !!!!TestBean!testBean;6 ! !!!!@Test! !!!!public!void!canInjectSimpleBean()!{! !!!!!!!!assertThat(testBean).isNotNull();! !!!!}6 }
  19. 19. Guiceberry vs. AcceptIt • Injection
 mit Guice! • TestScope
 • Injection
 mit CDI! • TestScope! • InjectionPoint

  20. 20. Herausforderungen beim Testen von Webanwendungen
  21. 21.     driver.findElement(By.id("q")).sendKeys(text);
  22. 22.     driver.findElement(By.id("q")).sendKeys(text); Finden
  23. 23. Finden wait.until(ExpectedConditions.titleIs("Google"));     driver.findElement(By.id("q")).sendKeys(text);
  24. 24. Finden wait.until(ExpectedConditions.titleIs("Google"));     driver.findElement(By.id("q")).sendKeys(text); Wartenund
  25. 25. Das war …. Spagetthi-Code
  26. 26. Anwendung Page Object Test WebDriver Browser
  27. 27. Anwendung Page Object Test WebDriver Browser
  28. 28. Anwendung Page Object Test WebDriver Browser Fernsteuern des Browser
  29. 29. Anwendung Page Object Test WebDriver Browser alle fachlichen Operationen einer Seite
  30. 30. @PageObject! public!class!GooglePage!{! ! !!!!@Inject! !!!!private!WebDriver!driver;! ! !!!!@FindBy(name!=!"q")! !!!!private!WebElement!searchField;6 ! public6void6search(String6in)6{}6 }
  31. 31. Anwendung Page Object Test WebDriver Browser fachliche Tests.
  32. 32. !!!!@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
  33. 33. Ein Beispielprojekt Chuck Norris Approved 90%
  34. 34. Try!
  35. 35. Als Dessert: Der Mehrwert zu Guiceberry
  36. 36. Anwendung Page Object Test WebDriver Browser Wiederverwendung! Page Atom
  37. 37. @PageObjectAtom! public!class!SearchFieldUsingWebElement!{! ! !!!!@Inject! !!!!WebElement!searchField;! ! !!!!public!void!search(String!query)!{! !!!!!!!!searchField.sendKeys(query);! !!!!!!!!searchField.submit();! !!!!}! }
  38. 38. @PageObjectAtom! public!class!SearchFieldUsingWebElement!{! ! !!!!@Inject! !!!!WebElement!searchField;! ! !!!!public!void!search(String!query)!{! !!!!!!!!searchField.sendKeys(query);! !!!!!!!!searchField.submit();! !!!!}! } !@Inject! !@FindBy(name!=!"q")! !private!SearchFieldUsingWebElement!search;!
  39. 39. @PageObjectAtom! public!class!SearchFieldUsingWebElement!{! ! !!!!@Inject! !!!!WebElement!searchField;! ! !!!!public!void!search(String!query)!{! !!!!!!!!searchField.sendKeys(query);! !!!!!!!!searchField.submit();! !!!!}! } !@Inject! !@FindBy(name!=!"q")! !private!SearchFieldUsingWebElement!search;!
  40. 40. Conversion!
  41. 41. Aus der Praxis
  42. 42. Die Situation
  43. 43. Das Ziel
  44. 44. Wie verspeist man einen Elefanten?
  45. 45. Stück für Stück
  46. 46. Die Charakeristik der Pferde
  47. 47. @Test6 public6void6navigiereZurNiederlassung()6{6 666homePage.get();6 ! 666ClientAgenciesListPage6ger6=66 666666homePage.niederlassung("Deutschland");6 66 666assertThat(ger.getNiederlassungen())6 66666666.hasSize(22)6 66666666.haveExactly(1,6sc("KUNDE!GmbH!Sylt"))6 66666666.haveExactly(1,6sc("KUNDE!xyz"))6 66666666;6 }6
  48. 48. http://www.sigs.de/download/ oop_09/Dirbach%20NEU.pdf

×