我在Python2.5上使用unittest2来发现unittest.TestLoader.discover的测试,如下所示:
suite = unittest2.loader.TestLoader().discover(test_path)
unittest2.TextTestRunner(verbosity=2,
resultclass=ColorTestResult).run(suite)在我的项目基础上的一些test_path。
我有一个基类,它被许多其他类扩展和重载,但我想测试这些派生类是否没有回归。让我们将基类称为A及其派生类A1、A2等。
我想为A的每个派生创建一个可以重载的unittest2.TestCase基类。换句话说,我希望有一个类似这样的层次结构:
class A:
pass
class A1(A):
pass
class UT(unittest2.TestCase):
target = A
class UT2(UT):
target = A1现在的诀窍是,我把A变成了一个抽象类,而UT在几乎所有被认为是UT2的测试用例上都会失败,等等。
对我来说,最简单的解决方案似乎是让unittest2的discover以某种方式“跳过”UT。我认为这是可能的,只要把它放到一个文件中,而不是一个匹配的模式'test*.py',尽管情况似乎并非如此。
对于上述场景,有没有合适的解决方案?
如果您有任何想法和建议,我将不胜感激。
发布于 2011-06-09 19:04:33
我猜问题是UT2继承了UT,所以定义UT2的模块导入了UT --因此它在模块命名空间中可用。因此,即使discovery没有查看定义UT的模块,它仍然可以在UT2模块中找到TestCase。
这是使用自己定义测试的基本TestCases的一个普遍问题。
有几种可能性。一种方法是通过函数公开UT,这样包含UT2的模块就可以导入函数,而不是直接导入UT:
class UT2(get_base_class()):
target = A1可以使用super()访问UT上的属性。
另一个可能更好的解决方案是让UT变得更抽象。您可以省略UT上的目标(因为它似乎没有任何作用?)如果没有目标(或者目标是A),则让setUp调用skipTest。
第三种解决方案是让UT不继承TestCase,而是将其用作mixin:
class UT2(TestCase, UT):
target = A1https://stackoverflow.com/questions/6286499
复制相似问题