我正在尝试创建一个简单的框架,它将从特定目录(我对这些情况使用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