首页 > 解决方案 > 仅针对一个子类的 Python unittest 跳过测试

问题描述

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

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,以防万一

标签: pythonpython-unittestpython-decorators

解决方案


您不能@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())

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


推荐阅读