单元测试-Python Unittest2-避免在discover()中包含TestCase



我在Python2.5上使用unittest2来发现带有unittest.TestLoader.discover的测试,如下所示:

suite = unittest2.loader.TestLoader().discover(test_path)
unittest2.TextTestRunner(verbosity=2,
        resultclass=ColorTestResult).run(suite)

在我的项目基础上的一些CCD_ 4。

我有一个基类,它被许多其他基类扩展和重载,但我想测试一下这些导数是否没有回归。让我们把基类A及其衍生物A1A2等称为

我想创建一个unittest2.TestCase基类,它可以为A的每个导数重载。换句话说,我希望有一个类似这样的层次结构:

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"来实现,尽管事实似乎并非如此。

对于上述情况,是否有合适的解决方案?

如果有任何想法和建议,我将不胜感激。

我猜问题在于UT2继承自UT,因此定义UT2的模块导入UT,从而使其在模块命名空间中可用。因此,即使发现不查看定义UT的模块,它仍然可以在UT2模块中找到TestCase。

这是拥有自己定义测试的基本测试用例的一个常见问题。

有几种可能性。一种是通过函数公开UT,因此包含UT2的模块将直接导入函数而不是UT:

class UT2(get_base_class()):
    target = A1

UT上的属性可以使用super()访问。

另一个也许更好的解决方案是让UT变得更抽象。您可以省略UT上的目标(因为它似乎没有任何用途?),如果没有目标(或者目标是A),则可以调用setUp skipTest。

第三个解决方案是让UT而不是从TestCase继承,而是将其用作混合:

class UT2(TestCase, UT):
     target = A1

最新更新