Javafx TornadFX和TestFX在每个测试用例之后关闭视图

Javafx TornadFX和TestFX在每个测试用例之后关闭视图,javafx,kotlin,testfx,tornadofx,Javafx,Kotlin,Testfx,Tornadofx,我正在尝试用testfx框架测试一个基本的loginscreen(使用tornadofx创建) 我添加了3个运行良好的测试用例,但问题是它们使用了前一个阶段,而不是创建一个新的阶段。我希望测试用例独立运行 我正在测试视图(),而不是应用()。如果我使用MyMainApp().start(stage),然后使用MyMainApp().stop(),我将获得所需的行为。 但是如何对视图和片段执行此操作 代码如下: class LoginScreenFeatureTest : ApplicationT

我正在尝试用testfx框架测试一个基本的loginscreen(使用tornadofx创建)

我添加了3个运行良好的测试用例,但问题是它们使用了前一个阶段,而不是创建一个新的阶段。我希望测试用例独立运行

我正在测试视图(),而不是应用()。如果我使用MyMainApp().start(stage),然后使用MyMainApp().stop(),我将获得所需的行为。
但是如何对视图和片段执行此操作

代码如下:

class LoginScreenFeatureTest : ApplicationTest() {

    override fun init() {
        FxToolkit.registerStage { Stage() }
    }

    override fun start(stage: Stage) {
        LoginScreen().openWindow()
        //MyMainApp().start(stage)
    }

    override fun stop() {
        FxToolkit.cleanupStages()
        //FxToolkit.toolkitContext().registeredStage.close()
        //MyMainApp().stop()
    }

    @Test fun should_contain_button() {
        // expect:
        verifyThat("#submitBut", hasText("SUBMIT"))
    }

    @Test fun should_click_on_button_and_pass_login() {
        //init
        //Why do I always need to erase text. I want a new stage for every test case.
        clickOn("#username").eraseText(10).write("validUser")
        clickOn("#password").eraseText(10).write("validPwd")
        clickOn("#orgId").eraseText(10).write("validOrg")

        // when:
        clickOn("#submitBut")

        // then:
        //verify success 
    }

    @Test fun should_click_on_button_and_fail_login() {
        //init
        clickOn("#username").eraseText(10).write("anyuser")
        clickOn("#password").eraseText(10).write("anypwd")
        clickOn("#orgId").eraseText(10).write("anyorg")

        // when:
        clickOn("#submitBut")

        // then:
        //verify fail 
    }
}

可以在App()类中添加可随时编辑的属性

类MyMainApp:App(){
覆盖val primaryView:KClass=primaryViewMyApp
伴星{
var primaryViewMyApp:KClass=MyMainAppView::class
}
初始化{
importStylesheet()
}
覆盖乐趣开始(阶段:阶段){
超级开始(阶段)
}
覆盖乐趣停止(){
超级停止
}
}
在测试中,您可以使用任何想要使用的视图。到目前为止,我还没有尝试为Fragment实现一些东西

    override fun init() {
        FxToolkit.registerStage { Stage() }
    }

    override fun start(stage: Stage) {
        MyMainApp.primaryViewGoApp = <your view>::class
        MyMainApp().start(stage)
    }

    override fun stop() {
        FxToolkit.cleanupStages()
        MyMainApp().stop()
    }
override fun init(){
FxToolkit.registerStage{Stage()}
}
覆盖乐趣开始(阶段:阶段){
MyMainApp.primaryViewGoApp=::类
MyMainApp().start(阶段)
}
覆盖乐趣停止(){
FxToolkit.cleanupStages()
MyMainApp().stop()
}
    override fun init() {
        FxToolkit.registerStage { Stage() }
    }

    override fun start(stage: Stage) {
        MyMainApp.primaryViewGoApp = <your view>::class
        MyMainApp().start(stage)
    }

    override fun stop() {
        FxToolkit.cleanupStages()
        MyMainApp().stop()
    }