2013-02-04 128 views
2

我正在嘗試創建一個簡單的框架,它將從特定目錄(我對這些情況使用unittest)發現所有測試用例,並運行這些測試用例中的每一個針對多個Python文件,這些文件都將使用相同的函數簽名來實現相同的代碼。Python:運行相同的Unittest模塊測試多個文件

Autograder.py 
TestCasesFolder/ 
    TestCase1.py 
    TestCase2.py 
    ... 
ImplementationFolder/ 
    Implementation1.py 
SecondImplementationFolder/ 
    Implementation2.py 

框架成功地找到所有使用測試用例(注意,這是在類)

self.suites = unittest.defaultTestLoader.discover(self.testDirectory) 

從那裏,我想運行在兩個Implementation1和Implementation2這些套房。

我一直在使用內置的

self.suites.run(unittest.TestResult) 

方法從單元測試運行我的測試,我在解決這個問題的第一次嘗試導入當前實現,我想用測試

imp.load_source 

,然後使用正確的模塊引用更新TestCase1.py的全局名稱空間。但是,因爲每個模塊都有其自己的全局名稱空間,所以我不確定是否可以掛接到其他文件名稱空間。我也不確定這是否是正確的方法,或者是否有比我的實現更好的方法。我應該如何去做這件事?

編輯 ,似乎工作我目前的解決方案是Autograder.py文件更新__builtins__模塊到實現模塊的參考。實際行看起來像:

__builtins__.ImplementationModule = imp.load_source("Implementation Module", "Implementation1.py") 

這意味着當TestCase1.py訪問通過__builtins__到ImplementationModule。當然,這個問題是假定__builtins__模塊從未實現任何具有名稱ImplementationModule的任何東西,否則我會用未知含義覆蓋它。這樣做的風險較低嗎?

回答

0

你看過鼻子系統嗎?這聽起來與你正在做的非常相似。

http://readthedocs.org/docs/nose/

+0

不幸的是,由於機器的限制,該AutoGrader.py運行,我真的只能使用內置的模塊來使用Python 3.x的 – HB087

+1

即使你想自己寫 - 鼻子可能有一些好主意。而且安裝起來非常簡單。我設法在嵌入式電視控制器上安裝鼻子,並將其用於測試,因此您可能不會覺得困難。 – Vorsprung

相關問題