如何在后台线程运行时测试JavaFX应用程序中的main方法?

时间:2014-06-06 12:59:48

标签: java javafx javafx-8

我有以下JavaFX应用程序,只是想测试主方法没有出错,我该怎么做?我应该这样做吗?

public class GUISimple extends Application {
    @Override
    public void start(final Stage primaryStage) throws IOException {
        primaryStage.setTitle("TCG Console");
        Parent root = FXMLLoader.load(ConsoleController.class.getResource("console.fxml"));
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.centerOnScreen();
        primaryStage.show();
    }

    public static void main(String... args) {
        launch(args);
    }
}

到目前为止我所拥有的:

public class GUISimpleTest {
    @Test
    public void testMain() {
        GUISimple.main();
    }
}

我已经使用TestFX测试了其他类,包括ConsoleController和GUI。对于这个特定的测试我虽然使用JUnit。

这里需要注意的关键点是ConsoleController启动另一个线程,该线程在调用GUISimple.main()后运行。

调用System.exit(0)Platform.exit()似乎退出测试。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

launch()阻止了JavaFX的线程。 在单独的线程中启动GUISimple.main(),例如:

@Test
public void testMain() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                // Do something
                Thread.sleep(3000);
            }
            catch (InterruptedException e) {
            }
            System.exit(0);
        }
    }).start();

    GUISimple.main();
}