2010-07-21 76 views
31

我已目錄,其中包含文件命名,如: test_foo.pyPython的單元測試和發現

每個文件都是一個測試用例。

我想

1)運行在命令行目錄中的所有測試。我使用的是unittest2,因爲我們運行的是Python 2.5.1。從這些目錄中的一個我嘗試在命令行鍵入:

python -m unittest2 discover -p 'test_*.py' 

和幾個不同的變體。我沒有錯,但沒有任何反應。我期待在該目錄中的所有測試用例中的所有測試運行並獲得結果。

2)我也試過在我做這個目錄有一個腳本:

loader = unittest2.TestLoader() 
t = loader.discover('.') 

如果我打印t變量,我可以看到我的測試案例,但是從文檔我想不通一旦我擁有它,我會怎樣處理加載器對象。

回答

23

給你如何嘗試在Python的< 2.7使用unittest2在命令行中,我想你可能已經錯過了the note on the unittest2 PyPI page

命令行模式

在Python 2.7您使用python -m unittest <args>調用單元測試 命令行功能(包括測試 發現)。由於單元測試是一個包,並且 與 python -m ...調用包的能力在Python 2.7中是新的,我們 不能爲unittest2做到這一點。

取而代之的是unittest2帶有一個腳本 unit2。命令行用法:

unit2 discover unit2 -v test_module 

還有這個腳本 叫unit2.py,對於Windows 有用的,它使用的文件擴展名,而不是 家當線,以確定哪些 程序與執行文件的副本。這兩個腳本均由 distutils安裝。

您是否嘗試過unit2腳本,本筆記建議將Python 2.7作爲「運行包作爲主腳本」功能的替代方案?也許它的來源也可能有助於準確找出如何從你自己的代碼中發現和運行測試,如果這是你想要做的。

+0

謝謝亞歷克斯!我錯過了那個筆記。現在它起作用了。你用過鼻子嗎?你推薦它嗎? 偉大的書籍btw,感謝他們的寫作。 – Aaron 2010-07-21 17:10:52

+0

@Aaron,不客氣!是的,我過去很喜歡用鼻子(我還不知道用新的單元測試功能是否會替換或補充它 - 我不是那麼熟悉後者!)。 – 2010-07-21 18:37:35

42

運行python -m unittest discover時遇到了同樣的問題。這是一個很好的檢查列表來驗證您的設置。 Nose對於允許的配置更靈活,但不一定更好。

  1. 確保所有文件/目錄都以test開頭。做不是使用test-something.py,因爲這不是一個有效的python模塊名稱。使用test_something.py

  2. 如果要將測試放在子目錄中(例如test/),請確保創建了test/__init__.py文件,以便python將該目錄作爲包處理。

  3. 所有類測試用例的定義必須擴展爲unittest.TestCase。例如

    class DataFormatTests(unittest.TestCase) 
    
+0

有沒有辦法使用unittest發現來添加引導腳本? – 010110110101 2011-09-16 00:45:40

+0

也有方法名,例如'test_does_something(self):' – 2016-01-12 11:49:28

+1

對我來說,創建'tests/__ init __。py'解決了這個問題。 – gzc 2017-01-07 11:41:37

47

一旦發現測試,您可以用測試運行運行它們。

import unittest2 
loader = unittest2.TestLoader() 
tests = loader.discover('.') 
testRunner = unittest2.runner.TextTestRunner() 
testRunner.run(tests) 

運行上述代碼會將測試結果打印到標準輸出。

+10

這是我正在尋找的人,也是最原始問題的最直接答案。雖然在2.7中看起來略有不同, 'test_loader = unittest.defaultTestLoader.discover('。')';那麼'test_runner = unittest.TextTestRunner()';然後'test_runner.run(test_loader)',你很好。 – Paul 2012-04-17 13:15:17

+3

如果您需要以編程方式調用測試運行程序,例如從自定義腳本或「Command」實例中說,這是推薦的方法。 – 2013-06-21 07:03:44