假设我的单元测试设置如下:
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_thing
类的TestC
。有什么方法可以使用@unittest.skipif
装饰器来做到这一点?还是其他简便的方法可以仅针对此类跳过该测试?
Python 2.7,以防万一
答案 0 :(得分: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
答案 1 :(得分:0)
您不能在此处使用@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”,然后将其添加到基类。