JavaFXのJUnitテスト
JUnitテストがExceptionInInitializerErrorで失敗する
特にGUI全体をユニットテストしたいわけではないのだが、一部GUI部品を使っているところについてJUnitを作成したいこともある。しかし、例えば以下のように記述すると、
import org.junit.*;
import javafx.scene.control.*;
public class TestfxTest {
@Test
public void test() {
ContextMenu menu = new ContextMenu();
menu.getItems().add(new MenuItem("a"));
}
}
以下のエラーが発生してしまう。
java.lang.ExceptionInInitializerError
at com.cm55.fx.TestfxTest.test(TestfxTest.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
org.testfxを使う
単純にorg.testfxを使ってみる。gradleであれば以下を追加する。
testCompile group: 'org.testfx', name: 'testfx-junit', version: '4.0.13-alpha'
あとはJUnitテストにApplicationTestを継承させるだけだ。
import org.junit.*;
import org.testfx.framework.junit.*;
import javafx.scene.control.*;
public class TestfxTest extends ApplicationTest {
@Test
public void test() {
ContextMenu menu = new ContextMenu();
menu.getItems().add(new MenuItem("a"));
}
}