2011-11-07 32 views
9

我有以下典型的Python項目文件結構如何組織和運行單元測試和功能測試分別使用nosetests

packageA 
    +----subpackage1 
      +----classa.py 
    +----subpackage2 
      +----classb.py 
    +----test 
      +----subpackage1 
        +----classa_test.py 
      +----subpackage2 
        +----classb_test.py 

我目前正在組織我的單元測試和功能測試,所以我可以運行單元測試和功能測試單獨使用鼻子,但也可以選擇運行所有測試。測試將存在於packageA/test/subpackage1和packageA/test/subpackage2中。

  • 什麼是組織不同測試的好方法?按文件夾(功能/ vs單元/)?通過命名約定的測試類(ClassATest vs ClassAFunctionalTest)?或者通過命名測試方法的約定(classa_foo_test vs classa_bar_functional_test)?
  • 有人可以解釋一下nosetests的正則表達式匹配是如何工作的嗎?選項-m,-i和-e似乎並不像我預期的那樣運行。正則表達式是否匹配目錄(subpackage1),文件(classa_test)或測試類(ClassATest)或測試方法(classa_foo_test)?我非常困惑

回答

7

我的測試目錄結構看起來是這樣的:

root 
    + --- tests 
    |  + --- unit_tests 
    |  |   + --- some_app_tests 
    |  |   + --- another_app_tests 
    |  |   | run_tests.py 
    |  | 
    |  + --- integrate_tests 
    |     + --- some_app_tests 
    |     + --- another_app_tests 
    |     | run_tests.py 
    |  
    + --- project_root 
      + --- some_app 
      + --- another_app 

對於每個單獨的應用程序創建coresponding目錄與存在於單位和integrate-目錄測試。每個目錄都是獨立的django項目,具有自定義設置,並有用於運行測試的管理命令。

將測試放置在一個目錄中有一個很好的優點 - 當部署項目時,沒有理由使用它來部署測試。所以我只是放一個目錄而已。

(運行我使用的Django理智測試測試:https://github.com/Almad/django-sane-testing

+0

你說:「每個目錄都是單獨的django項目,自定義設置,並有管理命令用於運行測試」,但你的樹實際上並沒有顯示這一點。另外,您使用的自定義管理命令是什麼? – supervacuo

+0

@supervacuo我沒有說**自定義管理命令**,但管理命令與**自定義設置**。測試由django-sane-testing通過'manage.py test'命令運行(在設置中進行一些修改,包裝到'run_tests.py'中,參見DST doc - http://django-sane-testing.readthedocs.org/ en/latest/usage.html#running-tests) – yedpodtrzitko

+0

好,夠公平的。 – supervacuo

-2

我會嘗試按功能區域組織測試。我真的不知道鼻子是什麼。

但是,如果您例如測試網頁的登錄區域,然後創建一個名爲「登錄」或「loginTests」的子文件夾,併爲菜單測試創建一個「菜單」或「menuTests」文件夾。擁有良好的命名約定總是好的,所以請將測試和文件夾命名爲他們正在測試的內容。儘可能具體。

1

如果您正在開發Django項目,你可以試試這個庫:unclebob https://github.com/gabrielfalcao/unclebob

它提出一個方法如何組織和運行你的單元測試和功能測試。

+0

+1我之前沒有見過'unclebob',但它似乎是一個鼓勵良好測試實踐的非常好的方式(我特別喜歡「如果你只運行單元測試,那麼unclebob不會設置測試數據庫」) ,它甚至很新近更新。 – supervacuo