0

我创建了 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 的行为。

我该怎么做呢?

  1. 每次创建数据库的新子类时都将所有单元测试子类化?
  2. 通过方法生成测试用例和套件?
  3. ...

您将如何确保子类数据库正常工作并且没有错误?

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

现在存在的测试:

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):
        ...
4

1 回答 1

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方法,因为子类的其余 APIA2应与A.

所以你的测试子类只是:

class TestA2(TestCaseA):
    def setUp(self):
        self.thing = A2()
于 2012-08-05T13:55:08.680 回答