1

我有一个具有以下双重继承的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 执行两个测试呢?

我假设 unittestLower以某种方式在其中找到一个测试并在其中找到一个测试Upper,但我只想执行在其中找到的测试Lower(因为附加和必需的设置功能)。我怎样才能做到这一点?

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

4

1 回答 1

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()

更新:

我想现在我明白了你想要什么:你希望测试方法只在子类中运行。然后我建议您继承Upperfromobject和子类 - fromUpperTestCase

import unittest

class Upper(object):

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

class Lower(unittest.TestCase, Upper):

    pass

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

跑步:

python test2.py -v
test_dummy (__main__.Lower) ... ok

----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
于 2013-03-20T14:15:48.673 回答