2

我正在尝试创建一个简单的框架,它将从特定目录中发现所有测试用例(我对这些用例使用 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)

来自 unittest 的方法来运行我的测试,我第一次尝试解决这个问题是导入我想要测试的当前实现

imp.load_source

然后使用正确的模块引用更新 TestCase1.py 的全局命名空间。但是,因为每个模块都有自己的全局命名空间,所以我不确定是否可以连接到其他文件命名空间。我也不确定这是否是正确的方法,或者是否有比我的实现更好的方法。我该怎么做呢?

编辑 我目前似乎可行的解决方案是让 Autograder.py 文件__builtins__参考实施模块来更新模块。实际的行如下所示:

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

这意味着当 TestCase1.py 可以通过__builtins__. 当然,问题是假设__builtins__模块永远不会实现任何名为 ImplementationModule 的东西,否则我会用未知的含义覆盖它。这样做有没有风险较小的版本?

4

1 回答 1

0

你看过鼻子系统吗?这听起来与您正在做的事情非常相似。

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

于 2013-02-04T21:44:41.883 回答