2014-12-02 94 views
1

如果我想編寫單元測試,我只需將我的test/子目錄下的一個文件放入我的測試類unittest.TestCase中進行heriting。如何編寫鼻子測試套件

現在我想爲測試套件使用這樣的模式:我有一個Python文件test/與類(擴展unittest.TestSuite)讀取文件並從中生成測試。我已經有解析文件並從它們生成TestCase的代碼。

但鼻子沒有檢測到這個類。我怎樣才能讓鼻子知道這個文件並從中生成測試?

回答

1

你不指定你正在使用的python版本。使用Python 2.7+,您可以在模塊中定義一個load_tests函數,該函數將被調用以創建該模塊的TestSuite。

但是,鼻子忽略了load_tests協議。如果你有nose2,那麼它的負載測試協議的功能是plugin

否則,您創建一個空白TestCase並填充生成的測試函數。例如:

import unittest 

data = ["a", "b", "c"] # or from whatever source you want 

class GeneratedTests(unittest.TestCase): 

    def setUp(self): 
     self.correct = "b" 

def setup_module(): 
    for i, d in enumerate(data): 
     test_driver = create_driver(d) 
     name ="test_generated{}".format(i) 
     setattr(GeneratedTests, name, test_driver) 

def create_driver(d): 
    def test_driver(self): 
     self.assertEqual(d, self.correct) 
    return test_driver 

setup_module() 

最後一種方法是使用subtest context manager。這僅適用於3.4+。不過,你可以找到一個窮人的替代品here。希望它能幫助你以更可讀的方式構建你生成的測試。

+0

理想情況下,我想針對兼容性問題的Python 2.7。 – Kartoch 2014-12-02 12:37:08

+0

問題已經更新與蟒蛇版本 – Kartoch 2014-12-02 12:37:23

+0

這絕對是我正在尋找,但爲蟒蛇2.7和鼻子。 – Kartoch 2014-12-02 12:38:24