当tk_messageBox出现在tcl中时进入

时间:2016-05-16 08:29:37

标签: unit-testing tcl tk keystroke

所以我想在tcl gui做一些单元测试,在单元测试的某些部分,有一个tk_messageBox会弹出,如果我不按回车,单元测试不会继续

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

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

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

2 个答案:

答案 0 :(得分:0)

这取决于你所处的平台。如果你在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,因为这两个平台使用本机系统对话框。如果你在那里,你需要调整代码以便首先不显示消息框对话框要求通用自动化工具为你点击按钮。

答案 1 :(得分:0)

由于您不需要测试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-blocks,就像Donal为tk_messageBox指出的那样,在Windows和Mac OS X上不能轻易跳过这些。