如何防止JavaFX测试项目中的重复

如何防止JavaFX测试项目中的重复,javafx,testfx,Javafx,Testfx,我有一个非常简单的JavaFX项目来教自己如何使用testfx编写测试。我不知道如何防止自己不得不复制sample.fxml文件。该项目的结构目前为: My Main.java如下所示: package sample; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx

我有一个非常简单的JavaFX项目来教自己如何使用testfx编写测试。我不知道如何防止自己不得不复制sample.fxml文件。该项目的结构目前为:

My Main.java如下所示:

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

    static Stage stage;

    @Override
    public void start(Stage stage) throws Exception {
        Main.stage = stage;
        Parent root = FXMLLoader.load(getClass().getResource("../../resources/sample.fxml"));
        Scene scene = new Scene(root, 300, 275);
        stage.setTitle("FXML Welcome");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
我无法从我的测试类中访问sample.fxml,使用它复制testfx会更容易,但这显然不是前进的方向。我也尝试过通过在测试类中调用start()来创建场景,但是我得到一个错误,即不能多次调用launch()


是否有其他人遇到过这种情况并找到了前进的方向?

为了避免复制.fxml文件(我同意这并不理想),我建议您从src/main/resources加载该文件。您可以通过使用控制器的类加载器(或非测试代码中的任何其他类)来实现这一点

    String filename = "sample.fxml";
    ClassLoader loader = Controller.class.getClassLoader();
    File file = new File(loader.getResource(filename).getFile());
    Parent root = FXMLLoader.load(loader.getResource(filename));