Prečo je písanie dlhodobo udržiavateľných testov dôležitejšie ako písanie udržiavateľného kódu? A ako vlastne na to? Prezentácia zľahka nadväzuje na predchádzájúcu prednášku (http://www.slideshare.net/petersimun/presentation-11002440) a popisuje odporúčané postupy a praktické ukážky toho, ako automatizovane testujeme interaktívne webové aplikácie, aké neštastia nás pritom postihli a ako sme z toho vykľučkovali.
5. Pravidlo č.2: Striktná a dôkladná architektúra
Express your tests in the
language
of the end-user of the app
Ubiquitous Language
Domain driven design
6. Prihlásiť sa do synapsa
Pridať prázdnu stránku
Pridať twitter komponent - @webelement
Pridať twitter komponent - @petersimun
Vycentrovať twitter komponenty na stred stránky
Presunúť druhý twitter komponent (@petersimun) pred prvý twitter komponent
(@webelement)
Overiť výsledok na stránke – správne poradie twitter komponentov, pozícia na
stránke
Express your tests in the
language
of the end-user of the app
8. public class Twitter implements WebElement {
private String twitterAccount = "synapso";
private int twittsCounts = 5;
public Twitter (String twitterAccount) {
this.twitterAccount = twitterAccount;
}
public String getTwitterAccount() {
return twitterAccount;
}
public WebElement getTwitterElement() {
return twitterElement;
}
obyčajné POJO
predstavuje vstupné podmienky testu
mapuje sa a zobrazuje na UI
9. public class TwitterPage {
public By getTwitterSelector() {
return By.xpath("//div[contains(@class,'twitterWidget') and
contains(@class,'floatClear')]//ul");
}
public By getTweetSelector(String source) {
return By.xpath("//div[contains(@class,'twitterWidget
floatClear') and contains(@source,'" + source
+ "')]//ul//li[position() = 1]");
}
public By getTwitterInputSelector() {
return By.xpath("//div[contains(@class,'acris-metal-
dialog')]//input[contains(@class,'gwt-Text')]");
}
}
reprezentuje UI komponenty pomocou selectorov
ak sa niečo zmení na UI, zmenu treba pravdepodobne reflektovať na tomto
mieste
Ak nechcete skončiť v pekle, nepoužívajte selectory v testoch alebo v support
triedach!!
10. public class UsernamePasswordLoginSupport implements LoginSupport
{
@Override
public void login(UserData userData, Language language) {
}
@Override
public void login(UserData user) {
}
@Override
public void logout() {
}
...
}
Písaný v jazyku zrozumiteľnom pre ľudí ( developer ≠ človek )
Úzko komunikuje so selenium a zaobaluje znovupoužiteľnú funkcionalitu do
metód