我使用unittest2
打开Python2.5
来发现unittest.TestLoader.discover
的测试,如下所示:
suite = unittest2.loader.TestLoader().discover(test_path)
unittest2.TextTestRunner(verbosity=2,
resultclass=ColorTestResult).run(suite)
在我项目的基础上。
我有一个基类,它被许多其他类扩展和重载,但是我想测试一下这些派生类没有回归。让我们调用基类
test_path
及其派生类A
,A1
,等等。我想创建一个
A2
基类,它可以为unittest2.TestCase
的每个派生项重载。换句话说,我想要一个类似这样的层次结构:class A:
pass
class A1(A):
pass
class UT(unittest2.TestCase):
target = A
class UT2(UT):
target = A1
现在的诀窍是我将
A
变成一个抽象类,并且A
将在几乎所有适当通过UT
的测试用例上失败,等等。对我来说,最简单的解决方案似乎是让unittest2的
UT2
以某种方式“跳过”discover
。我想这是可能的,把它放到一个文件中,而不是一个匹配的模式'test*.py',虽然这似乎不是这样。对于上述情况,是否有合适的解决方案?
我很感激你的任何想法和建议。
最佳答案
我猜问题在于UT2继承自UT,所以定义UT2的模块导入UT,从而使其在模块名称空间中可用。因此,即使discovery不查看定义UT的模块,它仍然可以在UT2模块中找到TestCase。
这是一个有自己定义测试的基本测试用例的一般问题。
有一些可能性。一种方法是通过函数公开UT,因此包含UT2的模块导入该函数,而不是直接导入UT:
class UT2(get_base_class()):
target = A1
可以使用super()访问UT上的属性。
另一个或许更好的解决方案是让UT也更抽象。你可以忽略UT上的目标(因为它似乎没有作用?)如果没有目标(或者目标是一个),则让setUp调用skipTest。
第三种解决方案是让UT不从TestCask继承,而是使用它作为MIXIN:
class UT2(TestCase, UT):
target = A1
关于python - Python Unittest2-避免在Discover()中包含TestCase,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6286499/