我有一个python unitest脚本,其TestCase
的双重继承如下:
import unittest
class Upper(unittest.TestCase):
def test_dummy(self):
pass
class Lower(Upper):
pass
if __name__ == '__main__':
unittest.main()
这个想法是定义一个带有测试方法实现的上层类,并从这个类(在不同的子目录中)派生,它包含一些额外的设置功能。最后,有一个upper.py
,其中衍生出许多不同的test_lower.py
。测试方法仅在upper.py
中实现。
鉴于上面的例子,我现在只做python test_example.py
只看到python试图运行2次测试!该脚本只包含一个测试,为什么unittest执行两个测试?
我假设unittest在Lower
内找到一个测试,在Upper
中找到一个测试,但我只想执行Lower
中的测试(因为需要额外的和必需的)设置功能)。我怎样才能做到这一点?
上下文在实际情况中,这两个类在两个不同的文件中定义,驻留在两个目录中。也许这有帮助。
答案 0 :(得分:0)
Unittest库迭代TestCase子类属性,找到以test_
开头的方法。在Lower
测试用例的情况下,它从其父级继承一个方法,因此它被执行两次 - 一次在Upper
测试用例内,第二次在Lower
类内。
如果要运行这两个测试用例,我看到的唯一解决方案是对test_dummy
Upper
测试。
如果您希望测试在父类中运行,但在某些子类中跳过,请尝试以下操作:
import unittest
class Upper(unittest.TestCase):
def test_dummy(self):
pass
class Lower(Upper):
def test_dummy(self):
return # skip test
@unittest.skip # or this - but ugly
def test_dummy(self):
return # skip test
if __name__ == '__main__':
unittest.main()
更新:
我想现在我理解你想要的东西:你希望测试方法只在子类中运行。然后我建议你继承Upper
的{{1}}和子类 - 来自object
和Upper
:
TestCase
运行:
import unittest
class Upper(object):
def test_dummy(self):
self.assertTrue(True)
class Lower(unittest.TestCase, Upper):
pass
if __name__ == '__main__':
unittest.main()