5

Oracle の JavaFx HelloWorld アプリで TestFx を動作させるのに問題があります。

public class HelloWorld extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

TestFx junit テスト:

class MyTest extends GuiTest {
  public Parent getRootNode() {
    return nodeUnderTest;
  }

nodeUnderTestこの例ではどうすればよいでしょうか?

4

2 に答える 2

8

TestFx は単体テスト フレームワークであるため、GUI 実装の一部を取得してテストするように設計されています。そのためには、まずこれらのパーツを使用可能にし、ID でタグ付けしてテスト ターゲット (ボタンなど) を使用可能にする必要があります。

getRootNode() は、次の GUI テストのテスト手順のルートを提供します。上記の例では、StackPane ルートが候補になる可能性がありますが、それを許可するには、テストで使用できるようにする必要があります。

 class MyTest extends GuiTest {
     public Parent getRootNode() {
         HelloWorld app = new HelloWorld();
         return app.getRoot(); // the root StackPane with button
     }
 }

そのため、getRoot() を実装するようにアプリを変更し、テスト用のコンテンツを含む StackPane を返す必要があります。start() メソッドは必要ありません。

その上でテストを実行できます...

@Test
public void testButtonClick(){
    final Button button = find("#button"); // requires your button to be tagged with setId("button")
    click(button);
    // verify any state change expected on click.
}
于 2014-12-10T07:47:28.297 に答える