2015-07-22 134 views
1

我有兩個模塊和兩個不同的類及其相應的測試類。是否可以運行所有單元測試?

foo.py 
------ 
class foo(object): 
    def fooMethod(self): 
     // smthg 

bar.py 
------ 
class bar(object): 
    def barMethod(self): 
     // smthg 

fooTest.py 
------ 
class fooTest(unittest.TestCase): 
    def fooMethodTest(self): 
     // smthg 

barTest.py 
------ 
class barTest(unittest.TestCase): 
    def barMethodTest(self): 
     // smthg 

在任何測試和源模塊,文件,我因爲增加一致性和服從面向對象的思想的擦除if __name__ == "__main__":

與Java單元測試一樣,我正在尋找創建模塊來運行所有unittest。例如,

runAllTest.py 
------------- 
class runAllTest(unittest.TestCase): 
    ????? 

if __name__ == "__main__": 
    ????? 

我查找了搜索引擎,但沒有找到任何教程或示例。是否有可能這樣做?爲什麼?或如何?

注:我在Windows機器上使用eclipse和pydev分佈。

+1

我會測試文件重命名爲「test_foo.py」格式,並在測試目錄中運行'nosetests'。 'nose'將自動發現所有的測試文件和測試類。 – suzanshakya

回答

2

您可以創建一個TestSuite和運行所有測試中它的if __name__ == '__main__'塊:

import unittest 

def create_suite(): 
    test_suite = unittest.TestSuite() 
    test_suite.addTest(fooTest()) 
    test_suite.addTest(barTest()) 
    return test_suite 

if __name__ == '__main__': 
    suite = create_suite() 

    runner=unittest.TextTestRunner() 
    runner.run(suite) 

如果你不想創建測試用例手動看this quesiton/answer,基本上動態創建測試用例,或者使用一些unittest模塊的功能,如test discovery功能和command line選項..

0

我想你正在尋找的是TestLoader。有了這個,你可以加載特定的測試或模塊,或者加載給定目錄下的所有東西。另外,this文章還有一些使用TestSuite實例的有用示例。

編輯:代碼我通常在我的test.py:

if not popts.tests: 
    suite = unittest.TestLoader().discover(os.path.dirname(__file__)+'/tests') 
    #print(suite._tests) 

    # Print outline 
    lg.info(' * Going for Interactive net tests = '+str(not tvars.NOINTERACTIVE)) 

    # Run 
    unittest.TextTestRunner(verbosity=popts.verbosity).run(suite) 
else: 
    lg.info(' * Running specific tests') 

    suite = unittest.TestSuite() 

    # Load standard tests 
    for t in popts.tests: 
     test = unittest.TestLoader().loadTestsFromName("tests."+t) 
     suite.addTest(test) 

    # Run 
    unittest.TextTestRunner(verbosity=popts.verbosity).run(suite) 

做了兩兩件事:

  1. 如果-t標誌(測試)不存在,查找和加載所有測試在目錄
  2. 否則,加載請求測試一個接一個
+0

爲什麼是-1? – urban

0

您正在尋找nosetests

可能需要重命名你的文件;我不確定模式鼻子用來找到測試文件,但是,我個人使用*_test.py。可以指定一個自定義模式,您的項目使用測試文件名,但我記得無法使其工作,所以我最終重命名我的測試。

您還需要遵循PEP 328慣例來處理鼻子。我不使用Python的IDE,但您的IDE可能已經遵循它 - 只要閱讀PEP並檢查。

隨着PEP 328目錄/封裝結構,可以作爲

nosetests path.to.class_test 

注意,而不是通常的目錄分隔符(或/\)中,我使用的點運行單獨的測試。

要運行全部測試,只需在項目的根目錄調用nosetests即可。

1

PyDev右鍵單擊Eclipse中的文件夾並選擇「Run as-> Python unit-test」。這將運行該文件夾中的所有測試(測試文件和方法的名稱必須以「test_」開頭)。

0

我認爲您可以在您的測試文件所在的文件夾下運行以下命令:

python -m unittest 
這裏在 doc「當不帶參數運行測試發現啓動」提到

相關問題