2010-07-15 111 views
4

我听说过单元测试,自己写了一些测试,就像测试一样,但从未使用任何测试框架。现在我正在为一些内部数据分析/可视化库编写wxPython GUI。我已阅读了一些明显的谷歌搜索结果,例如http://wiki.wxpython.org/Unit%20Testing%20with%20wxPython及其链接http://pywinauto.openqa.org/,但我仍不确定从哪里开始。如何对wxPython进行单元测试?

有没有人有一个人谁排序知道理论,但从未使用过任何框架和不知道它是如何工作的GUI与经验或很好的参考?

我在Windows机器上开发了一个理论上跨平台的应用程序,它使用NumPy,Matplotlib,Newville的MPlot包和wxPython 2.8.11。 Python 2.6和3.1的计划。我为一群科学家工作,所以没有内部的单元测试策略。

+0

感谢迄今为止的出色答案。我将在今天晚些时候看看PyPubSub,unittest/nose和更干净的MVC分离。 – Wang 2010-07-15 14:44:38

回答

1

如果你想单元 - 测试您的应用程序,你没有专注于GUI测试技术。使用MVC,MVP或其他这样的元模式编写应用程序要好得多。所以你将业务逻辑和表示层分开。

由于这是您的代码,覆盖测试业务层更重要。表示层已由wxWidgets开发人员测试。要测试业务层,只需使用基本工具(如标准unittest模块和nose)即可。

要确保整个应用程序的行为正确,你应该添加一些acceptance测试,从测试结束功能来结束。这些将处理GUI,但与单元测试的次数相比,这样的测试几乎没有。

如果你只会限制自己与验收测试,你会得到覆盖率低,脆弱,很慢的测试代码库。

+0

也许我在这里滥用术语。业务逻辑 - 如何绘制XAFS数据等 - 已经编写完成。我被带到专门把漂亮的菜单放在上面,所以几乎所有的代码// //表示层和我想要捕捉的类似的东西,我忘了重画画布,以便新的在用户调整窗口大小之前,情节不会出现?或者我误解了表示层的含义? – Wang 2010-07-15 14:47:12

+0

美观和视觉正确性的自动测试是一项艰巨的任务。在画布大小调整的情况下,最好测试使用模拟画布配置的Presenter/Controller:调用'my_presenter.handle_button_x_click',然后'assert my_presenter.canvas.redraw.called'。 – nkrkv 2010-07-15 15:05:50

1

进行单元测试您的应用程序,而不需要大量的模仿对象/存根,你的GUI的事件处理程序应该基本委托给其他方法调用,在传递值从事件对象作为参数传递给委托的方法。

否则,您将无法测试您的应用程序,而无需模拟wx的对象。

看看在PyPubSub项目为一个伟大的模块,以帮助MVC。

0

在我的一个早期项目中,我真的使用GUI层测试wxPython应用程序。所以测试真正旋转住wxApp对象,弹出真正的窗口,然后开始搞乱一个真正的MainLoop()。很快我意识到这是一个错误的测试方法。我的测试运行非常缓慢且不可靠。更好的方法是把GUI的东西放在一边,只测试应用程序的“模型”级别。请注意,您实际上可以为演示级别逻辑(表示应用程序的某些可视部分的模型)创建模型并对其进行测试。但是这个模型不应该包含任何“真正的”GUI对象(窗口,对话框,小部件)。

+1

这似乎是默认的答案。集成测试图形应用。如果你有一个大的应用程序,这将是一个很好的方式来捕捉像“对话框xy不打开”,“按钮xy是(不)禁用”,特别是像鸭子一样打字的问题。添加另一层只是改变了问题。不幸的是,对于wxPython,我不知道像http://www.froglogic.com/squish/gui-testing/。在单元测试,手动测试和部署之后,我仍然遇到Tracebacks,我讨厌它。所以我一直在研究类似挤压,狗尾巴或者wxPy这样的节目,但是无济于事:-( – Bluehorn 2013-02-15 07:12:09