如何进行单元测试才能找到我的单一测试方法一次?

时间:2013-03-20 14:11:08

标签: python unit-testing

我有一个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中的测试(因为需要额外的和必需的)设置功能)。我怎样才能做到这一点?

上下文在实际情况中,这两个类在两个不同的文件中定义,驻留在两个目录中。也许这有帮助。

1 个答案:

答案 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}}和子类 - 来自objectUpper

TestCase

运行:

import unittest

class Upper(object):

    def test_dummy(self):
        self.assertTrue(True)

class Lower(unittest.TestCase, Upper):

    pass

if __name__ == '__main__':
    unittest.main()