测试子类行为?

时间:2012-08-05 13:14:58

标签: python unit-testing testing

我创建了4个类(Python)的合作。

class A:
    ## A, B, C are nested classes of A
    class B:
        ...
    class C:
        ...
    class D:
        ...
    ## example methods
    def newB(self):
        return self.B()
    def newC(self):
        return self.C(self.newB())

我在4个测试用例中编写了60个测试方法,这很难。

由于B,C,D不提供太多行为,因此应对A,B,C,D类进行子类化以添加新行为。

问题:

我写了很多测试代码,以确保A,B,C,D合作正确。 如果我将A,B,C,D子类化为A2,B2,C2,D2,我将需要以与测试A,B,C,D相同的方式测试A2,B2,C2,D2的行为。

我该怎么做?

    每次我创建一个新的Database子类时,
  1. 都会对所有单元测试进行子类化?
  2. 通过方法生成测试用例和套件?
  3. ...
  4. 您确保子类数据库正常运行并且没有错误的做法是什么?

    给定:单元测试,数据库类和子类

    现在测试:

    class TestA(unittest.TestCase):
        A = A
        def setUp(self):
            self.a = self.A()
        def test_something(self):
            ...
    
    class MockB(A.B):
        ...
    class AWithMock(A):
        B = MockB
    class TestAWithMock(TestA):
        A = AWithMock
        def setUp(self):
            self.a = self.A()
        def test_something_new(self):
            ...
    
    class MockB2(A.B):
        ...
    class MockC2(A.C):
        ...
    class MockD2(A.D):
        ...
    class TestWithMock(unittest.TestCase):
        def test_b(self):
            b = MockB2()
            ...
        def test_c(self):
            ...
        def test_d(self):
            ...
    

1 个答案:

答案 0 :(得分:0)

import unittest
class TestCaseA(unittest.TestCase):
    def setUp(self):
        self.thing = A()

    def test_does_x():
        self.assertTrue(self.thing.does_x())

现在定义一个子类A2:

class A2(A):
    ...

我会将您的测试用例子类化,但只覆盖setUp / setup方法,因为子类A2的其余API应与A一致。

所以你的测试子类只是:

class TestA2(TestCaseA):
    def setUp(self):
        self.thing = A2()