仅针对一个子类的 Python unittest 跳过测试

Posted

技术标签:

【中文标题】仅针对一个子类的 Python unittest 跳过测试【英文标题】:Python unittest skip test for only one subclass 【发布时间】:2019-02-28 10:34:57 【问题描述】:

假设我的单元测试设置如下:

import unittest

class BaseTest(object):
    def setup(self):
        self.foo = None

    def test_something(self):
        self.assertTrue(self.foo.something())

    def test_another(self):
        self.assertTrue(self.foo.another())

    def test_a_third_thing(self):
        self.assertTrue(self.foo.a_third_thing())

class TestA(BaseTest, unittest.TestCase):
    def setup(self):
        self.foo = FooA()


class TestB(BaseTest, unittest.TestCase):
    def setup(self):
        self.foo = FooB()


class TestC(BaseTest, unittest.TestCase):
    def setup(self):
        self.foo = FooC()

现在假设FooC 还没有实现a_third_thing,我只想跳过test_a_third_thingTestC 类。有什么方法可以使用 @unittest.skipif 装饰器来做到这一点?或者其他一些方便的方法来跳过这个只针对这个类的测试?

Python 2.7,以防万一

【问题讨论】:

BaseTest 应该继承 TestCase 您可以覆盖TestC 中的测试,例如def test_a_third_thing(self): pass @pylang 这就是我最终要做的,想要添加它作为答案吗? 完成。如果您确实找到了跳过测试的方法,我很想知道您发现了什么。 【参考方案1】:

您可能不需要“跳过”测试。一种简单的方法是使用虚拟对象覆盖基本测试。

class TestC(BaseTest, unittest.TestCase):
    def setup(self):
        self.foo = FooC()

    def test_a_third_thing(self):
        """Override the assertions of the base test."""
        pass

【讨论】:

【参考方案2】:

您不能在此处使用@unittest.skipif,因为它是在模块期间评估的,并且需要在运行时运行检查。

要达到预期的效果,您在基类中的test_a_third_thing 应该如下所示:

class BaseTest(unittest.TestCase):   
    def test_a_third_thing(self):
        if not getattr(self.foo, "a_third_thing", None):
            self.skipTest(self.foo.__class__.__name__ + ' has no a_third_thing, skip')
        else:
            self.assertTrue(self.foo.a_third_thing())

还将您的示例中的拼写错误 setup 修复为 setUp。从测试类的继承列表中删除“unittest.TestCase”并添加到基类中。

【讨论】:

谢谢。我的示例中没有拼写错误,BaseTest 故意不从 TestCase 继承,因为我不想为 BaseTest 运行测试(它没有有效的 foo 属性)。看到这个问题:***.com/questions/1323455/… @C_Z_ 如果这回答了你的问题,你能接受这个答案吗? 这并没有具体回答我的问题,例如,假设我确实为 FooC 定义了一个 foo 方法,但它没有完全实现,而是返回“False”。正如 pylang 建议的那样,可能在 TestC 中覆盖测试是要走的路。

以上是关于仅针对一个子类的 Python unittest 跳过测试的主要内容,如果未能解决你的问题,请参考以下文章

python 单元测试,unittest 测试框架

15. Unittest单元测试框架的介绍与使用

Python+unittest+request断言方法封装

Python接口测试实战3(下)- unittest测试框架

Python接口测试实战3(下)- unittest测试框架

Python接口测试实战3(下)- unittest测试框架