带有模态对话框的 wxpython 单元测试
wxpython unittest with modal dialog
我有一个 wxPython GUI,我正在尝试使用 unittest 来测试我的一些模式对话框。我试着按照这里给出的例子(你必须向下滚动到页面底部):http://wiki.wxpython.org/Unit%20Testing%20with%20wxPython,但它对我不起作用。它只是在中间冻结。
我已经将 wiki 中的代码改编为:
btn_id = wx.NewId()
class MyDialog(wx.Dialog):
def __init__(self, parent):
wx.Dialog.__init__(self, parent, -1, 'Test')
self.btn = wx.Button(self, btn_id, label="OK!!")
self.btn.Bind(wx.EVT_BUTTON, self.close_dialog)
def close_dialog(self, event):
print 'close me'
class TestMyDialog(unittest.TestCase):
def setUp(self):
self.app = wx.App()
self.frame = wx.Frame(None)
self.frame.Show()
def tearDown(self):
wx.CallAfter(self.app.Exit)
self.app.MainLoop()
def testDialog(self):
def clickOK():
clickEvent = wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, btn_id)
self.dlg.ProcessEvent(clickEvent)
print 'finished clickOK'
wx.CallAfter(clickOK)
self.ShowDialog()
def ShowDialog(self):
self.dlg = MyDialog(self.frame)
self.dlg.ShowModal()
self.dlg.Destroy()
if __name__ == '__main__':
unittest.main()
根据我的理解,应该发生的是调用 ShowDialog,然后在 ShowModal 上获取 'stuck',此时 clickOk 应该 运行(由 wx.CallAfter 调用)。这似乎发生了,但由于某种原因,点击事件实际上没有被处理,测试挂起。当我 运行 MyDialog 未在测试时,事件绑定工作正常,并且在单击“确定”按钮时对话框关闭。
我不应该需要 app.mainloop() 来处理事件,对吧?这是怎么回事?
看看 Phoenix https://github.com/wxWidgets/Phoenix 中的单元测试,看看 test_dialog.py 和 wtc.py
中的基地人员
我有一个 wxPython GUI,我正在尝试使用 unittest 来测试我的一些模式对话框。我试着按照这里给出的例子(你必须向下滚动到页面底部):http://wiki.wxpython.org/Unit%20Testing%20with%20wxPython,但它对我不起作用。它只是在中间冻结。
我已经将 wiki 中的代码改编为:
btn_id = wx.NewId()
class MyDialog(wx.Dialog):
def __init__(self, parent):
wx.Dialog.__init__(self, parent, -1, 'Test')
self.btn = wx.Button(self, btn_id, label="OK!!")
self.btn.Bind(wx.EVT_BUTTON, self.close_dialog)
def close_dialog(self, event):
print 'close me'
class TestMyDialog(unittest.TestCase):
def setUp(self):
self.app = wx.App()
self.frame = wx.Frame(None)
self.frame.Show()
def tearDown(self):
wx.CallAfter(self.app.Exit)
self.app.MainLoop()
def testDialog(self):
def clickOK():
clickEvent = wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, btn_id)
self.dlg.ProcessEvent(clickEvent)
print 'finished clickOK'
wx.CallAfter(clickOK)
self.ShowDialog()
def ShowDialog(self):
self.dlg = MyDialog(self.frame)
self.dlg.ShowModal()
self.dlg.Destroy()
if __name__ == '__main__':
unittest.main()
根据我的理解,应该发生的是调用 ShowDialog,然后在 ShowModal 上获取 'stuck',此时 clickOk 应该 运行(由 wx.CallAfter 调用)。这似乎发生了,但由于某种原因,点击事件实际上没有被处理,测试挂起。当我 运行 MyDialog 未在测试时,事件绑定工作正常,并且在单击“确定”按钮时对话框关闭。
我不应该需要 app.mainloop() 来处理事件,对吧?这是怎么回事?
看看 Phoenix https://github.com/wxWidgets/Phoenix 中的单元测试,看看 test_dialog.py 和 wtc.py
中的基地人员