Python:对多个文件运行相同的Unittest模块测试
imp.load_source
我正在尝试创建一个简单的框架,这个框架可以从一个特定的文件夹中找到所有的测试用例(我使用的是unittest来处理这些测试),然后把这些测试用例应用到多个Python文件上,这些文件都实现了相同的代码和相同的函数签名。
Autograder.py
TestCasesFolder/
TestCase1.py
TestCase2.py
...
ImplementationFolder/
Implementation1.py
SecondImplementationFolder/
Implementation2.py
这个框架成功找到了所有的测试用例(注意这是在类里面的内容)。
self.suites = unittest.defaultTestLoader.discover(self.testDirectory)
接下来,我想把这些测试用例在Implementation1和Implementation2这两个实现上运行。
我一直在使用unittest自带的方法来运行我的测试,我最初解决这个问题的尝试是通过
self.suites.run(unittest.TestResult)
导入我想要测试的当前实现,然后更新TestCase1.py的全局命名空间,确保它指向正确的模块。不过,因为每个模块都有自己的全局命名空间,我不确定是否可以连接到其他文件的命名空间。我也不确定这种方法是否正确,或者有没有比我现在的实现更好的办法。我该怎么做呢?
编辑
我目前的解决方案是让Autograder.py文件更新__builtins__
模块,添加对Implementation模块的引用。实际的代码看起来是这样的:
__builtins__.ImplementationModule = imp.load_source("Implementation Module", "Implementation1.py")
这意味着当TestCase1.py通过__builtins__
访问ImplementationModule时,可以正常工作。当然,这个问题在于它假设__builtins__
模块里面从来没有实现过名为ImplementationModule的东西,否则我可能会覆盖它,导致一些未知的问题。有没有更安全的做法呢?