2010-07-15 156 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

相關問題