python unittest继承抽象测试类

2024-09-24 02:23:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在python中使用unittest来编写一些测试。我正在测试两个类的行为,A和{},它们在行为上有很多重叠,因为它们都是{}的子类,这是抽象的。{{{cd6}不想为任何一个ATestCase和{}将是AbstractTestCase的子类,并将定义特定于A和{}的行为/输入数据。在

有没有一种方法可以通过python unittest创建一个抽象类,它可以通过继承TestCase来处理设置功能,但实际上不运行任何测试?在


Tags: 数据方法功能定义抽象类unittest子类testcase
2条回答

我试过了Łukasz的答案,它起作用了,但是我不喜欢OK (SKIP=<number>)消息。出于我自己的愿望和目标,我不想让我或其他人开始相信任何特定数量的跳过的测试,或者不信任和挖掘测试套件并询问为什么会跳过某些东西,而且总是这样?是故意的?对我来说,这是不可能的。在

我碰巧专门使用nosetests,而且按照惯例,以_开头的测试类不运行,因此将基类命名为_TestBaseClass就足够了。在

我在Pycharm中用Unittests和py.测试这两个都试图运行我的基类及其测试,结果导致错误,因为抽象基类中没有实例数据。也许有人对这两个跑步者中的任何一个有特定的了解,可以做一个套件,或者其他东西,绕过基类。在

当然,这样做肯定会奏效:

class BaseTestCase(unittest.TestCase):
    def setUp(self):
        pass  # common teardown

    def tearDown(self):
        pass  # common teardown


class ATestCase(BaseTestCase):
    def test1(self):
        pass


class BTestCase(BaseTestCase):
    def test1(self):
        pass

如果ATestCase或{}的知识在BaseTestCase中需要,只需重写子类中的某个方法,但在超类中使用它。在

^{pr2}$

请注意,如果任何test_(self)方法将在BaseTestCase中实现,那么当自动运行程序发现它们时,它们将运行(并且由于安装失败而失败)。在

作为一种解决方法,您可以在抽象测试的setUp子句中使用skipTest,并在子类中重写它。在

class BaseTestCase(unittest.TestCase):
    def setUp(self):
        self.instance = self._create_instance()

    def _create_instance(self):
        self.skipTest("Abstract")

    def test_fromBase(self):
        self.assertTrue(True)

请注意,跳过test_fromBase(例如,通过decorator)是不好的,因为“test should be skipped”逻辑将由所有子类继承。在

相关问题 更多 >