2009-08-27 82 views
16

對Python單元測試的最佳位置有共識嗎?Python的單元測試應該放在一個單獨的模塊中嗎?

單元測試應該與被測功能一起包含在同一個模塊中嗎(在模塊自己運行時執行(if __name__ == '__main__'等)),還是將單元測試包含在不同模塊中更好?

也許這兩種方法的組合最好,包括每個模塊中的模塊級別測試,以及將包含在多個模塊中的功能作爲獨立模塊(可能位於/ test子目錄?)中添加更高級別的測試。

我假設測試發現更簡單,如果測試包含在單獨的模塊中,但是如果被測試模塊被修改,如果他/她必須記得更新附加測試模塊,開發人員會承擔額外的負擔。

我很想知道人民在組織單元測試的最佳途徑的想法。

回答

10
  1. ,你要如果使用的是庫指定其中單元測試應該住在模塊
  2. 自己的小項目,或
  3. tests/子目錄在你的包在大的項目。

它是最適合你正在創建的項目的問題。

有時候你正在使用確定在測試應該去,因爲是和Django(你把你的測試中models.pytests.py或在您的應用程序一個tests/子目錄)的情況下的庫。

如果沒有現存約束條件,這是個人偏好問題。對於一小組模塊,將unittests放入您創建的文件可能會更方便。

對於任何超過幾個模塊的任何東西,我都會在軟件包的tests/目錄中單獨創建測試。將測試代碼與實施混合在一起會爲閱讀代碼的人增加不必要的噪音。

+0

感謝您的全包解答。我喜歡你的觀點,即減少實施代碼中的噪音。我還喜歡Mike的回答:在單獨的/ tests子目錄中包含測試時,試圖在模塊和測試之間保持1對1的關係。 – 2009-08-27 13:28:51

+0

我在這裏真的很迂腐,但Django(以及任何指示你把測試放在哪裏的東西)應該可能被稱爲框架而不是庫。 – num1 2013-07-02 03:52:20

9

個人而言,我在我的源目錄下創建一個測試/文件夾並嘗試,更多或更少的,鏡像我的主要來源代碼層次與單元測試當量(具有1個模塊= 1個的單元測試模塊作爲一個經驗法則)。

請注意,我使用nose其理念是不是單元測試的有點不同。

4

我一般保持測試碼在一個單獨的模塊,和運輸模塊/包和測試在一個單一的分配。如果用戶使用setup.py進行安裝,他們可以從測試目錄運行測試,以確保所有環境都能正常工作,但只有模塊的代碼最終在Lib/site-packages之下。

0

if __name__ == '__main__'等等對於小型測試來說很不錯。

2

有可能比測試使用if __name__ == '__main__'檢查其他原因。保持其他模塊中的測試會讓您看到該選項。另外 - 如果你重構模塊的實現,並且你的測試在另一個沒有被編輯的模塊中 - 你知道當你對重構的代碼運行它們時,測試沒有改變。

1

我通常會將它們放在一個單獨的文件夾中,通常稱爲test/。就我個人而言,我並沒有使用if __name__ =='__main__'檢查,因爲我使用了nosetests,它自己處理測試檢測。

10

是的,請使用單獨的模塊。

使用__main__這個技巧並沒有什麼意義。假設你的模塊中有幾個文件,並且它不再工作,因爲你不想在測試模塊時單獨運行每個源文件

另外,安裝模塊時,大部分時間爲,您不想安裝測試。您的最終用戶不關心測試,只有開發人員應該關心。

不,真的。把你的測試文件放在tests/,你的文檔放在doc之內,並且準備好一個Makefile文件,並準備好make test。任何其他方法都只是中間解決方案,僅適用於特定的小模塊。

相關問題