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

How can I prevent duplication in my JavaFX test project

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

我的 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);
    }
}

我无法从我的测试 class 访问 sample.fxml,并且通过复制它更容易学习 testfx - 但这显然不是前进的方向。我还尝试通过在我的测试 class 中调用 start() 来创建场景,但我收到一条错误消息,指出 launch() 不能被调用多次。

有没有其他人遇到过这个问题并找到了前进的方向?

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

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