我正在嘗試創建一個簡單的框架,它將從特定目錄(我對這些情況使用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的任何東西,否則我會用未知含義覆蓋它。這樣做的風險較低嗎?
不幸的是,由於機器的限制,該AutoGrader.py運行,我真的只能使用內置的模塊來使用Python 3.x的 – HB087
即使你想自己寫 - 鼻子可能有一些好主意。而且安裝起來非常簡單。我設法在嵌入式電視控制器上安裝鼻子,並將其用於測試,因此您可能不會覺得困難。 – Vorsprung