2012-08-06 59 views
2

我正在使用Python進行項目工作,使用Git進行版本控制,並且我決定是時候添加幾個單元測試。但是,我不確定最好的解決方法。如何在Python中安排和設置單元測試

我有兩個主要問題:我應該使用哪個框架,應該如何安排我的測試?首先,我打算使用unittest,因爲它是內置於Python的,但如果有一個令人信服的理由更喜歡別的東西,我可以提供建議。第二個問題是一個更加棘手的問題,因爲我的代碼已經有點混亂,有很多子模塊和相關的導入。我不確定在哪裏符合測試代碼。另外,如果可能的話,我寧願保持測試代碼與其他所有東西分開。最後,我希望測試能夠輕鬆運行,最好使用單個命令行命令和最小路徑設置。

大型Python項目如何處理測試?我知道通常有一個自動化系統可以在所有新簽入中運行測試。他們是如何做到的呢?建立測試系統的最佳實踐是什麼?

+1

你是否在使用某種框架(例如用於Web開發的Django)?您的框架可能會爲單元測試提供自己的包裝。如果沒有,你應該看看[doctest](http://docs.python.org/library/doctest.html)和[unittest](http://docs.python.org/library/unittest.html),兩個最重要的內置單元測試工具。 – 2012-08-06 05:26:51

回答

2

測試框架選擇主要是關於個人的喜好,也有一些普遍的:

  • 單元測試 - 這是Java的JUnit框架的克隆,所以它的語法不是那麼蟒蛇,員工共贏
  • unittest2 - 一個有特色單元測試
  • pytest - 全面而複雜的框架,但它的源代碼是一個有點嚇人,所以有時很難找到解決方案,如果您有任何問題
  • 鼻子 - 從pytest但簡單的增長,也許它是一個好主意你用鼻子

常用的目錄結構,例如是:

- project 
| - module_name 
    | - submodule.py 
| - tests 
    | requirements.txt 
    | test_submodule.py 
| - requirements.txt 

一個最佳實踐是使用的virtualenv:

$ virtualenv env # create virtualenv 
$ env/bin/activate # activate virtualenv 
$ pip install -r requirements.txt # install project requirements 
$ pip install -r tests/requirements.txt # install testing requirements 
$ py.test # if you use pytest 
+0

我試過單元測試,但遇到了無法在測試中使用相對導入的問題。谷歌搜索,看起來像所有的解決方案都相當複雜(如使用鼻子)。 – Antimony 2012-08-07 01:23:45

1

Python的unittest是好的,但它可能難以爲大型項目添加單元測試。原因是單元測試與最小塊的功能測試有關。

單元測試意味着使用許多彼此分離的小測試。除了代碼的測試部分之外,他們應該獨立於任何東西。

當unittests添加到現有代碼時,通常只添加它以測試被證明會導致錯誤的孤立情況。應該使用未修正的功能編寫添加的單元測試以公佈錯誤。然後應該修正錯誤,以便單元測試通過。這是第一個極端 - 僅向失敗的代碼添加單元測試。這是必須的。您應該爲失敗的代碼添加單元測試,並且在修復錯誤之前應該執行此操作。

現在,如何將單元測試添加到沒有使用它們的大型項目中是一個問題。單元測試的代碼量可能與項目本身的大小相當。這樣,另一個極端可能是將單元測試添加到一切。然而,這是太多的工作,你通常必須反向工程你自己的代碼來找到要測試的構件。

我建議找到代碼中最重要的部分並向它們添加單元測試。

+0

我打算只測試自包含的零件,並對其餘部分使用集成測試。 – Antimony 2012-08-06 12:36:44