【问题标题】:entering when tk_messageBox appear in tcl当 tk_messageBox 出现在 tcl 中时进入
【发布时间】:2016-05-16 08:29:37
【问题描述】:

所以我试图在 tcl gui 中做一些单元测试,在单元测试的某些部分,会弹出一个 tk_messageBox,如果我不按 Enter,单元测试将不会继续

你们中有人知道如何复制输入按钮(击键)吗?或者更好的是,注入 tk_messageBox 以使其消失的命令

尝试了调用命令,但 tk_messageBox 没有任何名称

tk_messageBox -icon error -title TEST -message "this is a test tkbox" -type ok -parent .

【问题讨论】:

    标签: unit-testing tcl tk keystroke


    【解决方案1】:

    这取决于您使用的平台。如果你在 Unix 上,你可以这样做:

    # Widget name depends on what is the parent widget and message box type
    # This is correct for -parent . -type ok
    .__tk__messagebox.ok invoke
    

    这不适用于 Windows 或 OSX,因为这两个平台使用本机系统对话框。如果您在那里,则需要首先调整代码以不放置消息框对话框要求通用自动化工具为您单击按钮。

    【讨论】:

    • 嗨,这将是我正在寻找的评论。我真的在任何地方都找不到它,谢谢:)
    【解决方案2】:

    由于您不需要测试 Tk 的 tk_messageBox,您可以跳过这部分代码。在您的测试单元中设置一个变量:

    set ::_testmode true
    

    在您的代码中:

    if { ! [info exists ::_testmode] } {
        tk_messageBox ...
    } else {
      # if you are using the return code from tk_messageBox, you
      # can set it here.
    }
    

    当然,这会使源代码有点混乱,但测试会起作用。我不得不围绕 tk_getSaveFile 和 tk_getOpenFile 做类似的 if 块,就像 Donal 为 tk_messageBox 指出的一样,这些在 Windows 和 Mac OS X 上不能轻易跳过。

    【讨论】:

    • 您好,感谢您的输入,但使用这种方法将意味着为单元测试更改数千行代码,这将使其效率低下,但谢谢:)
    • 这可能有点多,是的。如果您在 Windows 上,那么我会研究“autohotkey”程序——它可能能够为您自动执行其中一些任务。
    猜你喜欢
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多