现在,我正在考虑将 100% 的代码覆盖率纳入我的项目中。但是,我在对代码的主要入口点进行单元测试时遇到了问题:
public static void main(String[] args) {
launch(args);
}
这种方法很难测试,因为它会在后台启动一个全新的 JavaFX 程序。除此行为外,JavaFX 程序不能多次启动。此外,javafx.application.Application 的文档明确指出,“JavaFX 应用程序不应在 FX 工具包终止或从 ShutdownHook 终止后(即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 不允许在代码测试期间排除方法。 如果您有任何其他问题,请告诉我。谢谢!
一些额外的阅读: