2024-09-24 02:23:34 发布
网友
我需要在python中使用unittest来编写一些测试。我正在测试两个类的行为,A和{},它们在行为上有很多重叠,因为它们都是{}的子类,这是抽象的。{{{cd6}不想为任何一个ATestCase和{}将是AbstractTestCase的子类,并将定义特定于A和{}的行为/输入数据。在
unittest
A
AbstractTestCase
有没有一种方法可以通过python unittest创建一个抽象类,它可以通过继承TestCase来处理设置功能,但实际上不运行任何测试?在
我试过了Łukasz的答案,它起作用了,但是我不喜欢OK (SKIP=<number>)消息。出于我自己的愿望和目标,我不想让我或其他人开始相信任何特定数量的跳过的测试,或者不信任和挖掘测试套件并询问为什么会跳过某些东西,而且总是这样?是故意的?对我来说,这是不可能的。在
OK (SKIP=<number>)
我碰巧专门使用nosetests,而且按照惯例,以_开头的测试类不运行,因此将基类命名为_TestBaseClass就足够了。在
_
_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中需要,只需重写子类中的某个方法,但在超类中使用它。在
ATestCase
BaseTestCase
请注意,如果任何test_(self)方法将在BaseTestCase中实现,那么当自动运行程序发现它们时,它们将运行(并且由于安装失败而失败)。在
test_(self)
作为一种解决方法,您可以在抽象测试的setUp子句中使用skipTest,并在子类中重写它。在
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”逻辑将由所有子类继承。在
test_fromBase
我试过了Łukasz的答案,它起作用了,但是我不喜欢
OK (SKIP=<number>)
消息。出于我自己的愿望和目标,我不想让我或其他人开始相信任何特定数量的跳过的测试,或者不信任和挖掘测试套件并询问为什么会跳过某些东西,而且总是这样?是故意的?对我来说,这是不可能的。在我碰巧专门使用nosetests,而且按照惯例,以
_
开头的测试类不运行,因此将基类命名为_TestBaseClass
就足够了。在我在Pycharm中用Unittests和py.测试这两个都试图运行我的基类及其测试,结果导致错误,因为抽象基类中没有实例数据。也许有人对这两个跑步者中的任何一个有特定的了解,可以做一个套件,或者其他东西,绕过基类。在
当然,这样做肯定会奏效:
如果}的知识在
^{pr2}$ATestCase
或{BaseTestCase
中需要,只需重写子类中的某个方法,但在超类中使用它。在请注意,如果任何
test_(self)
方法将在BaseTestCase中实现,那么当自动运行程序发现它们时,它们将运行(并且由于安装失败而失败)。在作为一种解决方法,您可以在抽象测试的setUp子句中使用
skipTest
,并在子类中重写它。在请注意,跳过
test_fromBase
(例如,通过decorator)是不好的,因为“test should be skipped”逻辑将由所有子类继承。在相关问题 更多 >
编程相关推荐