1

我想知道在使用 TestFX 时我应该如何在 JavaFXML 中测试某些场景的内容。示例包括以下链接: https ://github.com/TestFX/TestFX/blob/master/subprojects/testfx-junit5/src/test/java/org/testfx/framework/junit5/ApplicationRuleTest.java

https://medium.com/@mglover/java-fx-testing-with-testfx-c3858b571320

第一个链接在测试类中构建场景,后者使用存储在自己的类中的预定义场景。当使用 JavaFXML 而不是 JavaFX 时,我应该如何做类似的事情,其中​​场景的结构是在 fxml 文件而不是 java 代码中定义的?

4

1 回答 1

2

第一步是在你的 fxml 文件中给你的组件 fx:id-s,然后是这样的:

public class ChangeProfilesMenuControllerTest extends ApplicationTest {
    Pane mainroot;
    Stage mainstage;

    @Override
    public void start(Stage stage) throws IOException {
      mainroot = (Pane) FXMLLoader.load(Main.class.getResource("ChangeProfilesMenU.fxml"));
      mainstage = stage;
      stage.setScene(new Scene(mainroot));
      stage.show();
      stage.toFront();

   }

    @Before
    public void setUp() throws Exception{

    }

   @After
   public void tearDown () throws Exception {
     FxToolkit.hideStage();
     release(new KeyCode[]{});
     release(new MouseButton[]{});
   }

   @Test
   public void addingAndDeletingProfiles() {
      @SuppressWarnings("unchecked")
      ListView<String> listview = (ListView<String>) mainroot.lookup("#listview");
      clickOn("#textfield");
      write("This is a test");
      clickOn("#createnewprofile");
      ...
  }

如果你想访问你的控制器类实例:

    @Override
    public void start(Stage stage) throws IOException {
        this.mainstage = stage;
        FXMLLoader loader = new FXMLLoader(getClass().getResource("GameOn2.fxml"));
        this.mainroot = loader.load();
        this.controller = loader.getController();
        stage.setScene(new Scene(mainroot));
        stage.show();
        stage.toFront();
    }
于 2020-05-19T19:23:51.167 回答