Python unittest 只跳过一个子类的测试
Python unittest skip test for only one subclass
假设我的单元测试设置如下:
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
class。有什么方法可以使用 @unittest.skipif
装饰器来做到这一点吗?或者其他一些方便的方法来跳过这个测试,只针对这个 class?
Python 2.7,以防万一
你不能在这里使用@unittest.skipif
,因为它是在模块期间评估的,需要的检查应该是运行在运行期间。
为了达到预期的效果,您的 test_a_third_thing
在基础 class 中应该如下所示:
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
。从测试 classes 的继承列表中删除 'unittest.TestCase' 并添加到基础 class.
您可能不需要 "skip" 测试。一种简单的方法是用虚拟对象覆盖基础测试。
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
假设我的单元测试设置如下:
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
class。有什么方法可以使用 @unittest.skipif
装饰器来做到这一点吗?或者其他一些方便的方法来跳过这个测试,只针对这个 class?
Python 2.7,以防万一
你不能在这里使用@unittest.skipif
,因为它是在模块期间评估的,需要的检查应该是运行在运行期间。
为了达到预期的效果,您的 test_a_third_thing
在基础 class 中应该如下所示:
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
。从测试 classes 的继承列表中删除 'unittest.TestCase' 并添加到基础 class.
您可能不需要 "skip" 测试。一种简单的方法是用虚拟对象覆盖基础测试。
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