2012-08-27 125 views
2

刪除測試,以運行我所有的單元測試我使用下面的腳本,test_files是我testfiles的字符串列表:從單元測試套件

for test_file in test_files: 
    test_file = test_file[:-3] 
    module = __import__(test_file) 
    for name, obj in inspect.getmembers(module): 
     if inspect.isclass(obj): 
      if str(obj).startswith("<class 'test_"): 
       suite.addTest(unittest.TestLoader().loadTestsFromTestCase(obj)) 

如何從套件中刪除單個測試之後(不是全部測試文件測試)?

回答

3

我最終創建了一個新的套件,並添加了除我想跳過的所有測試以外的所有測試。爲了將測試列爲跳過列表,我創建了一個虛擬SkipCase類。

class SkipCase(unittest.TestCase): 
    def runTest(self): 
     raise unittest.SkipTest("Test would take to long.") 

new_suite = unittest.TestSuite() 

blacklist = [ 
    'test_some_test_that_should_be_skipped', 
    'test_another_test_that_should_be_skipped' 
] 

for test_group in suite._tests: 
    for test in test_group: 
     if test._testMethodName in blacklist: 
      testName = test._testMethodName 
      setattr(test, testName, getattr(SkipCase(), 'runTest')) 
     new_suite.addTest(test) 
+1

你的解決方案是好的,但運行過程中還是會調用安裝/拆卸功能。要解決這個我已經改變你的setattr方法是這樣的:'setattr(test,testName,unittest.skip(reason)(getattr(test,testName)))'可能在測試後如果你同意,你可以更新你的答案! – shahjapan

2

您可以使用一個類或方法的基礎這個跳躍裝飾:

import unittest 
@unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") 
class MarketTest(unittest.TestCase): 
    def setUp(self): 
     return 
    @unittest.skip("Skipping market basics test") 
    def test_market_libraries(self): 
     return