2010-06-29 54 views
3

我想要做的是創建一個文件夾,其中人們可以放入一個文件進行測試,並讓pyunit自動展開以便作爲單獨的測試運行測試。目前,我在做什麼是:具有可變數量測試的PyUnit

class TestName(unittest.testcase): 
    def setUp(self): 
     for file in os.listdir(DIRECTORY): 
      # Setup Tests 

    def test_comparison(self): 
     for file in os.listdir(DIRECTORY): 
      # Run the tests 

def suite(): 
    return unittest.TestSuite([ 
unittest.TestLoader().loadTestsFromTestCase(TestName), 
]) 

if __name__ == "__main__": 
    unittest.TextTestRunner(verbosity=2).run(suite()) 

顯然存在很多問題與,例如,如果測試失敗,整個事情失敗了,等等,等等,我想什麼做的,是建立pyunit,以便它將爲放置在目錄中的每個文件運行測試(或測試用例)。現在,我想我可以做的就是創建上面列出的類,只有兩種方法,但爲了做到這一點成功,我將不得不在上下文中添加參數,如:

def setUp(self, filepath): 
    # Do stuff 

然後,我可以把循環中的代碼的主要塊,並運行測試是這樣的:

def suite(): 
    return unittest.TestSuite([ 
unittest.TestLoader().loadTestsFromTestCase(TestName, file), 
]) 

if __name__ == "__main__": 
    for file in DIRECTORY: 
     unittest.TextTestRunner(verbosity=2).run(suite(file)) 

但我不知道該怎麼辦,如果沒有幾乎重寫孔unittest.TestCase生成()類。有沒有什麼辦法可以做到這一點,或者有什麼其他方式可以根據文件夾中有多少文件動態擴展測試/測試用例集?謝謝。

回答

2

您可以使用nose支持test generators。這看起來像這樣:

def test_comparison(): 
    for file in os.listdir(DIRECTORY): 
     yield run_cmp_test, file 

def run_cmp_test(file): 
    # Run the tests 

另外,你也可以在py.test中使用funcargs

+0

那些看起來像發現單元測試工具。也許我應該澄清一下,將要放入文件夾的文件是數據文件(二進制文件和圖像),它們都可以用標準算法處理。因此,除非爲每個文件編寫單獨的測試,否則我不會看到如何使用它。 – 2010-06-29 03:00:43

+0

啊,好的。我沒有從原來的問題中得到這些。因此,您試圖處理'for x in y:test(x)'問題,其中測試在特定的'x'上失敗,但是您希望它無論在'y'上都運行嗎? – 2010-06-29 03:50:19

+0

基本上是的。我還想以類似於單個測試的格式將其輸出給用戶,但一旦啓動並運行,這樣做很簡單。謝謝。 – 2010-06-29 04:01:45

2

好的,我想我找到了我的問題的答案。我會說我正在使用全局命名空間,但由於某種原因,我平時對命名空間的瞭解卻一掃而空。

class TestImage(unittest.TestCase) 
    pass #Do stuff, as well as using the filename variable 

def suite(): 
    return unittest.TestSuite([ 
unittest.TestLoader().loadTestsFromTestCase(TestImage), 
]) 

if __name__ == "__main__": 
    for filename in os.listdir(sys.path[0]): 
     unittest.TextTestRunner(verbosity=2).run(suite()) 

這將爲目錄中的每個文件名運行測試用例。 (和文件夾名稱)。雖然我不知道爲什麼我可以在unittest類中使用文件名。它必須與這些宏加載和運行類的方式有關。

0

您可以用testscenarios,模塊,像這樣的事情做到這一點:

class MyTest(unittest.TestCase): 

    scenarios = [os.listdir(sys.path[0])] 

    ...