Как проверить функцию TornadoFX, которая создает новый вид? - PullRequest
0 голосов
/ 08 января 2019

Я хочу протестировать функцию, в которой новый вид создается в TornadoFX. Однако когда я вызываю функцию, я получаю эту ошибку.

java.lang.ExceptionInInitializerError
    at tornadofx.ControlsKt.button(Controls.kt:190)
    at tornadofx.ControlsKt.button$default(Controls.kt:190)
    at view.PeopleMenuView$setupTopBox$1$1.invoke(PeopleMenuView.kt:33)
    at view.PeopleMenuView$setupTopBox$1$1.invoke(PeopleMenuView.kt:8)
    at tornadofx.LayoutsKt.vbox(Layouts.kt:388)
    at tornadofx.LayoutsKt.vbox$default(Layouts.kt:103)
    at view.PeopleMenuView$setupTopBox$1.invoke(PeopleMenuView.kt:31)
    at view.PeopleMenuView$setupTopBox$1.invoke(PeopleMenuView.kt:8)
    at tornadofx.LayoutsKt.hbox(Layouts.kt:384)
    at tornadofx.LayoutsKt.hbox$default(Layouts.kt:96)
    at view.PeopleMenuView.setupTopBox(PeopleMenuView.kt:29)
    at view.PeopleMenuView.<init>(PeopleMenuView.kt:15)
    at presenter.MainMenuPresenter.managePeoplePressed(MainMenuPresenter.kt:11)
    at presenter.TestMainMenuPresenter.testManagePeoplePressed(TestMainMenuPresenter.kt:16)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.IllegalStateException: Toolkit not initialized
    at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:273)
    at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:268)
    at com.sun.javafx.application.PlatformImpl.setPlatformUserAgentStylesheet(PlatformImpl.java:550)
    at com.sun.javafx.application.PlatformImpl.setDefaultPlatformUserAgentStylesheet(PlatformImpl.java:512)
    at javafx.scene.control.Control.<clinit>(Control.java:87)
    ... 36 more

Это потому, что в функции создан новый экземпляр представления. Упрощенный код выглядит так:

fun managePeoplePressed() {
        view.replaceWith(PeopleMenuView())
    }

Когда я вызываю метод из теста, я получаю ошибку. Я погуглил, но об этом особо нечего найти.

Я хочу иметь возможность тестировать методы, которые создают представление. Спасибо.

1 Ответ

0 голосов
/ 08 января 2019

Вам нужно инициализировать JavaFX Toolkit. Если вы используете TestFX, вы можете позвонить FxToolkit.registerPrimaryStage(), если нет, вы можете создать экземпляр JFXPanel для достижения той же цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...