我正在尝试创建一个简单的框架,它将发现特定目录中的所有测试用例(我在这些情况下使用unittest)并针对多个python文件运行这些测试用例,这些文件都将实现相同的代码具有相同的功能签名。
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文件通过对Implementation模块的引用来更新__builtins__
模块。实际线条如下:
__builtins__.ImplementationModule = imp.load_source("Implementation Module", "Implementation1.py")
这意味着TestCase1.py可以通过__builtins__
访问ImplementationModule。当然问题是这假设__builtins__
模块从不实现任何具有名称ImplementationModule的东西,否则我将用未知的含义覆盖它。这样做的风险较低吗?