我听说过单元测试,我自己编写了一些测试,但从未使用任何测试框架。现在我正在为一些内部数据分析/可视化库编写一个wxPython GUI。我已经阅读了一些明显的Google搜索结果,例如http://wiki.wxpython.org/Unit%20Testing%20with%20wxPython及其链接http://pywinauto.openqa.org/,但我仍然不确定从哪里开始。
是否有人对那些了解该理论但从未使用任何框架并且不知道它如何与GUI一起工作的人有经验或良好的参考?
我在Windows机器上开发一个理论上跨平台的应用程序,它使用NumPy,Matplotlib,Newville的MPlot包和wxPython 2.8.11。 Python 2.6计划3.1。我为一群科学家工作,所以没有内部的单元测试政策。
答案 0 :(得分:1)
如果您想 unit - 测试您的应用程序,您不必专注于GUI测试技术。使用MVC,MVP或其他类似的元模式编写应用程序要好得多。因此,您将业务逻辑和表示层分开。
使用测试覆盖业务层更为重要,因为这是您的代码。表示层已由wxWidgets开发人员测试。要测试业务层,只需标准unittest模块和nose等基本工具即可。
为了确保整个应用程序的行为正常,您应该添加一些acceptance测试,以便从头到尾测试功能。这些将处理GUI,但与单元测试的数量相比,很少有这样的测试。
如果您仅限于接受测试,那么您将获得低覆盖率,脆弱且非常慢的测试代码库。
答案 1 :(得分:1)
要对应用程序进行单元测试而不需要大量模拟对象/存根,GUI的事件处理程序应该基本上委托给其他方法调用,将Event对象中的值作为参数传递给委托方法。
否则,如果不必模拟wx的对象,您将无法测试应用程序。
看一下PyPubSub项目,找一个很棒的模块来帮助MVC。
答案 2 :(得分:1)
在我的一个早期项目中,我真的使用GUI层测试wxPython应用程序。所以测试真的会旋转实时wxApp对象,弹出真正的窗口,然后开始搞乱真正的MainLoop()。很快我意识到这是一种错误的测试方式。我的测试运行得非常缓慢且不可靠。更好的方法是将GUI内容分开放置并仅测试应用程序的“模型”级别。请注意,您实际上可以为表示级逻辑(代表应用程序的某些可视部分的模型)创建模型并对其进行测试。但是这个模型不应该涉及任何“真正的”gui对象(窗口,对话框,小部件)。