Python:对多个文件运行相同的Unittest模块测试

2 投票
1 回答
1008 浏览
提问于 2025-04-17 14:45
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的东西,否则我可能会覆盖它,导致一些未知的问题。有没有更安全的做法呢?

1 个回答

0

你有没有看过nose这个系统?听起来跟你正在做的事情很像。

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

撰写回答