[英]ExceptionInInitializerError with TestFX and Junit5
我剛剛熟悉 Java 和 JavaFX,並且正在開發一個簡單的項目來測試 JavaFX UI。 但是,我認為我沒有正確初始化測試,因為我在實例化應用程序 object 時遇到了 ExceptionInInitializerError。 這是我的測試文件的相關部分:
public class AppGuiTest extends ApplicationTest {
private App app = new App();
@Override
public void start(Stage stage) throws Exception {
stage.setScene(app.getScene());
stage.show();
stage.toFront();
}
//tests here
}
在應用程序 object 中定義 label 時會出錯:
Label message = new Label("Welcome!");
這是我的 Gradle 文件的相關部分:
plugins {
id 'org.openjfx.javafxplugin' version '0.0.9'
}
dependencies {
implementation 'org.testfx:testfx-junit:4.0.15-alpha'
implementation 'org.loadui:testFx:3.1.2'
implementation 'org.testfx:testfx-junit5:4.0.16-alpha'
implementation 'org.junit.jupiter:junit-jupiter:5.8.1'
implementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
}
javafx {
version = "17"
modules = [ 'javafx.controls' , 'javafx.base']
}
JavaFX 部件本身運行良好。 只有當我嘗試添加測試時才會出現異常。 這甚至是我應該如何初始化事物嗎? 當我從測試文件中刪除 app 變量並注釋掉測試的內容時,測試通過了。 如果我沒有定義我的應用程序 object,我該如何測試 UI 元素?
我不確定如何修復此錯誤,因此任何輸入都會非常有幫助。 提前致謝!
您可以使用JUnit 5標簽@ExtendWith
和TestFx ApplicationExtension
class。 您還應該使用@Start
標記作為啟動方法並在那里初始化Label
(或App
)。
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.testfx.api.FxRobot;
import org.testfx.framework.junit5.ApplicationExtension;
import org.testfx.framework.junit5.Start;
import static org.testfx.assertions.api.Assertions.assertThat;
@ExtendWith(ApplicationExtension.class)
public class AppGuiTest {
private Label message;
@Start
protected void start(Stage stage) {
message = new Label("Welcome!");
stage.setScene(new Scene(new StackPane(message)));
stage.show();
}
@Test
public void testMessage() {
assertThat(message).hasText("Welcome!");
}
@Test
public void testChangeMessage(FxRobot robot) {
robot.interact(() -> message.setText("Bye!"));
assertThat(message).hasText("Bye!");
}
}
您的 JUnit 5 的 Gradle 應如下所示:
dependencies {
testCompile 'org.junit.jupiter:junit-jupiter-api:5.8.2'
testCompile "org.testfx:testfx-junit5:4.0.16-alpha"
testCompile "org.testfx:testfx-core:4.0.16-alpha"
}
plugins {
id 'org.openjfx.javafxplugin' version '0.0.10'
}
javafx {
version = '17'
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.