簡體   English   中英

使用TestFX的TornadoFX在每個TestCase之后關閉View

[英]TornadoFX with TestFX close the View after every TestCase

我試圖用testfx框架測試一個基本的登錄屏幕(使用tornadofx創建)。

我添加了3個運行正常的測試用例,但問題是它們使用的是前一個階段而不是創建一個新階段。 我希望測試用例獨立運行。

我正在測試View()而不是App()。 如果我使用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()類中添加可以編輯的屬性。

class MyMainApp: App() {
    override val primaryView: KClass<out View> = primaryViewMyApp

    companion object {
        var primaryViewMyApp: KClass<out View> = MyMainAppView::class
    }

    init {
        importStylesheet(<your stylesheet>)
    }

    override fun start(stage: Stage) {
        super.start(stage)
    }

    override fun stop() {
        super.stop()
    }
}

在測試中,您可以使用任何想要使用的視圖。 到目前為止,我沒有嘗試為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()
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM