我很难让TestFx与Oracle的JavaFx HelloWorld应用程序一起工作:

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应该是什么?

最佳答案

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.
}

09-05 01:45