2011-12-01 105 views
22

我正在尋找一個優化的python測試文件的命名約定,它可以簡化不同測試框架(unittest,note,pyunit,...)的使用,並且對這些工具的測試自動發現也很友好。Python中測試文件的最佳命名約定是什麼?

我只想要一組明確的需要最少配置的工具。

  • 測試目錄名稱? testtests
  • 放哪裏測試? in module/testdir or module /../ testdir
  • 使用下劃線或破折號測試文件名? test_0.py或test-0.py

我知道,我有太多的時間:)

+3

的「 - 」在Python中造成問題,因爲它違反了將文件名映射到模塊名稱的規則。 **從不**使用有效的Python標識符以外的任何東西作爲Python文件名的一部分。 –

回答

12

別叫目錄test或將與衝突內置test包。

命名約定在PEP 8中定義。請參閱'命名約定'部分。下劃線比連字符要好!

包裝的佈局更靈活一些。我傾向於執行以下操作:

package 
|-- package 
| |-- __init__.py 
| `-- <etc> 
|-- tests 
| `-- <etc> 
|-- setup.py 
|-- README 
|-- LICENCE 
`-- <etc> 

這使測試與軟件包本身分離。使用setup.py安裝軟件包只能安裝源代碼,這可以讓人們的口譯員保持整潔。這些測試適用於需要它們的開發人員,當他們獲得軟件包源代碼時。

您應該查看The Hitch Hiker's Guide to Packaging以獲取關於Python包的更多信息。

+2

謝謝!只有一個子問題:如果我有幾個子模塊,這意味着我將不得不在同一目錄中合併所有測試?或者我應該只將它們移動到像'/ tests/a /'這樣的子目錄? – bogdan

+1

你可以誠實地以任何方式在這一個。 Django使用我提到的方法,我認爲很多至少把它們放在一個地方。但是,Django應用程序的測試遍佈全球,我相信很多人也是這樣做的。我會傾向於在一個地方散佈測試(在源代碼內部或外部),但我無法想到一個強有力的論據來給你任何一種方式:) – adamnfish

+3

將測試保存在單獨的目錄中的參數是完全依賴於美學。我同意@adamnfish關於將它們分開放置在一個反映代碼的目錄結構中 - 這樣人們就可以更容易地找到特定的測試來運行(正如我在開發過程中所做的那樣)。但是,如果你很容易改變項目結構(添加和刪除模塊/文件),你可能會錯過更新測試 - 但你會看到失敗,所以你會知道! –

1

這取決於您用來運行測試的工具。

如果您使用nosetest,用來檢測測試的理念很簡單:

If it looks like a test, it’s a test.

如果您使用py.test,該約定是pretty open too

關於「在哪裏把測試」的問題,personnaly,我寧願存儲測試在每個包一個子目錄,以確保不要忘了運行/觸摸測試,當有人編輯代碼;)