java如何对JavaFX程序的主要方法进行单元测试?
现在,我正在考虑将100%的代码覆盖率合并到我的项目中。但是,我在对代码的主要入口点进行单元测试时遇到了问题:
public static void main(String[] args) {
launch(args);
}
这种方法很难测试,因为它在后台启动了一个全新的JavaFX程序。除此之外,JavaFX程序不能启动more than once。此外,documentation for javafx.application.Application明确指出,“JavaFX应用程序不应在FX工具箱终止后或从关闭挂钩(即stop()
方法返回或System.exit(int)
被调用后)尝试使用JavaFX。”
我遇到这个项目是因为我也在使用TestFX,这是一个帮助JavaFX进行干净测试的库。但是,这个库不支持对main方法的测试,因此我必须编写一个变通方法。TestFX的开发人员可能知道这个问题的可能解决方法,对于每个单元测试的方法,都会启动一个Application
的新实例。也许有一种方法可以完全关闭并重置JavaFX程序的所有变量
公平地说,这个方法对测试来说并没有那么重要,但是拥有100%的代码覆盖率是令人愉快的。不测试这种方法是完全合理的。可在下面找到完整类:
package com.meti.app;
import javafx.application.Application;
import javafx.stage.Stage;
/**
* @author SirMathhman
* @version 0.0.0
* @since 4/5/2019
*/ //Main MUST remain public in order for JavaFX Application to start.
public class Main extends Application {
static InfinityImpl implementation = new Infinity();
static Main instance;
@Override
public void start(Stage primaryStage) {
instance = this;
implementation.start(primaryStage);
}
@Override
public void stop() {
implementation.stop();
instance = null;
}
public static void main(String[] args) {
launch(args);
}
}
上面的静态变量与前面提到的问题无关,用于在另一个类中进行测试,以确保委托正确工作。应用程序将大部分操作委托给一个委托类,这使得代码更易于测试
此外,IntelliJ doesn't allow methods to be excluded during code testing. 如果你还有其他问题,请告诉我。谢谢大家!
补充阅读:
共 (0) 个答案