2017-08-14 75 views
0

我有幾個保存在\ tests中的測試模塊。我然後在主類加載它們通過指定unittest.main()運行包中的所有測試模塊

from tests.ClassTests1 import * 
from tests.ClassTests2 import * 
... 

unittest.main() 

運行主程序之前,有沒有什麼辦法,以指導unittest.main()來運行\測試中的所有文件,而無需通過導入它們的無休止的重複去如上?例如。我試過from tests import *,它不起作用。

編輯:我在程序化發現後沒有通過命令行發現。

非常感謝!

回答

0

由於去約翰·戈登爲他的鏈接。這裏是什麼使得這對我的工作:

from tests.ClassTests1 import * 

# Run test cases first 
suite = unittest.TestLoader().discover('tests', pattern='ClassTests*.py') 
result = unittest.TextTestRunner(verbosity=2).run(suite) 

不過,我仍然需要進口至少一個測試模塊,我不知道如果我這樣做的權利,因爲它發現的tests整個測試層次。

0

https://docs.python.org/2/library/unittest.html,第25.3.3節。測試發現:

Unittest支持簡單的測試發現。爲了與測試發現兼容,所有測試文件都必須是可從項目的頂級目錄導入的模塊或包(這意味着它們的文件名必須是有效的標識符)。

測試發現在TestLoader.discover()中實現,但也可以從命令行使用。基本的命令行用法是:

cd project_directory

python -m unittest discover

+0

我已經更新了現在的問題,使其更清晰一點:我是在程序化發現之後而不是通過命令行發現的。 Python模塊內TestLoader.discover()的語法是什麼。謝謝! – afora377

+0

'TestLoader.discover()'返回包含所有已發現測試的TestSuite對象。執行返回的TestSuite對象的'.run()'方法來運行這些測試。 (在我回答中發佈的鏈接中,這一切都得到了相當好的解釋,你有沒有仔細閱讀?) –

+0

謝謝!這是一個大規模的閱讀,我是python的新手。所以我設法讓它發現了測試,但是,我無法弄清楚如何處理進口。現在要運行它,我需要明確指定至少一個測試模塊作爲導入,例如, '從tests.ClassTests1導入*'。這是與我直覺相反的,因爲我實際上在發現整個測試套件。但沒有這個導入它不會編譯。我究竟做錯了什麼?感謝您的幫助! – afora377

相關問題