2013-02-04 88 views
2

我正在尝试创建一个简单的框架,它将从特定目录(我对这些情况使用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的任何东西,否则我会用未知含义覆盖它。这样做的风险较低吗?

回答

0

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

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

+0

不幸的是,由于机器的限制,该AutoGrader.py运行,我真的只能使用内置的模块来使用Python 3.x的 – HB087

+1

即使你想自己写 - 鼻子可能有一些好主意。而且安装起来非常简单。我设法在嵌入式电视控制器上安装鼻子,并将其用于测试,因此您可能不会觉得困难。 – Vorsprung

相关问题