JSF Anwendungen testen mit AcceptIt

571 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
571
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

×