如何使用Python unittest来测试类层次结构?

时间:2012-07-03 08:52:06

标签: python unit-testing

给定一个Python类层次结构,比如说

class Base:
    def method1
    def method2
    def method3
    ...
class Derived1(Base)
class Derived2(Base)

并且假定Base定义了一些在每个Derived类中以不同方式重新实现的公共接口。 什么是对所有类的所有成员函数进行单元测试的最直接的方法。 由于我有一个类层次结构,我想做类似的事情......

class MyTestCase(unittest.TestCase):
    def testMethod1:
        ## Just as an example. Can be similar
        self.failUnless(self.instance.method1())
    def testMethod2
    ...

然后使用针对类层次结构的不同实例化的测试用例设置测试套件 但是如何将“instance”参数放入MyTestCase类?

2 个答案:

答案 0 :(得分:1)

skip装饰器适用于所有子类和基类,因此您不能简单地告诉unittest跳过基础。最简单的事情可能是根本没有从TestCase派生的基础测试类:

import unittest

class Base: pass
class Derived1(Base): pass

class BaseTest(object):
    cls = None

    def setUp(self):
        self.instance = self.cls()

    def test_Method1(self):
        print("run test_Method1, cls={}".format(self.cls))

class TestParent(BaseTest, unittest.TestCase):
    cls = Base

class TestDerived1(BaseTest, unittest.TestCase):
    cls = Derived1

unittest.main()

答案 1 :(得分:0)

您可以构建相同的测试层次结构

class BaseTest()
    cls = None

    def setUp(self):
        self.instance = self.cls()

    def test_Method1(self) 
        ...

class TestParent(unittest.TestCase, BaseTest):
    cls = Base


class TestDerived1(unittest.TestCase, BaseTest):
    cls = Derived1

...