gpt4 book ai didi

python unittest继承——抽象测试类

转载 作者:行者123 更新时间:2023-11-28 22:38:52 25 4
gpt4 key购买 nike

我需要在 python 中使用 unittest 来编写一些测试。我正在测试 2 个类的行为,AB,它们在行为上有很多重叠,因为它们都是 C 的子类,这是抽象的。我真的很想能够编写 3 个测试类:ATestCaseBTestCaseAbstractTestCase,其中 AbstractTestCase定义 ATestCaseBTestCase 的通用设置逻辑,但它本身不运行任何测试。 ATestCaseBTestCase 将是 AbstractTestCase 的子类,并将定义特定于 A 的行为/输入数据B

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

最佳答案

当然,这样的构造肯定会起作用:

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

如果 BaseTestCase 中需要来自 ATestCaseBTestCase 的知识,只需覆盖子类中的某些方法,但在父类(super class)中使用它即可。

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

def _create_instance(self):
raise NotImplementedError()


class ATestCase(BaseTestCase):
def _create_instance(self):
return A()


class BestCase(BaseTestCase):
def _create_instance(self):
return B()

请注意,如果任何 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(例如通过装饰器)并不好,因为“应该跳过测试”逻辑将被所有子类继承。

关于python unittest继承——抽象测试类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35304131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com