Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

Code Block
languagejavafx
<HBox xmlns:fx="http://javafx.com/fxml"
    fx:controller="javafx.fxmlexamples.Example4Controller">
    <TextField fx:id="textField" promptText="Type something here"/>
    <Button fx:id="upcaseButton" text="Click me!" onAction="#handleUpcaseAction"/>
</HBox>


...

Testing med TestFX

Når en bruker TestFX, må testklassen arve fra GuiTest (i pakken org.loadui.textfx). Dette (tror jeg) sikrer riktig trådhåndtering og oppstart av JavaFX. I motsetning til ved vanlig JUnit-tester, så bruker en ikke noen setUp-metode (JUnit 3) eller @Before-annotert metode (JUnit 4). Istedet redefineres Parent getRootNode()-metoden slik at den rigger opp (den delen av) GUI-et som skal testes og returnerer (en referanse til) rot-noden. Merk at denne ikke skal være lagt inn i noen Scene eller Stage, dette gjør TestFX for oss.

Testene skrives som vanlig (i JUnit 4) i metoder annotert med @Test. Disse kjøres selvsagt etter at getRootNode() er kalt, slik at GUI-et er ferdig rigget av TestFX. I testmetodene brukes egne metoder for 1) å få tak i spesifikk elementer i GUI-hierarkiet og 2) simulere bruker-interaksjon. F.eks. så brukes clickOn(...) til å klikke på knapper og i tekstfelt (for å gi det fokus) og type(...) for å taste inn tekst. Disse metodene er såkalt "fluent", så de kan kjedes sammen. Her er testkoden for eksemplet vårt:

Code Block
languagejavafx
linenumberstrue
public class Example5Test extends GuiTest {

	@Override
    protected Parent getRootNode() {
        try {
            return FXMLLoader.load(this.getClass().getResource("Example5Test.fxml"));
        } catch (IOException e) {
            System.err.println(e);
        }
        return null;
    }

    @Test
    public void testHandleProcess() {
        TextField textField = find("#textField");
        String text = "Example5 test";
        clickOn(textField).type(text);
        clickOn("#upcaseButton");
        assertEquals(text.toUpperCase(), textField.getText());
    }
}

...