我很难让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.
}