如何使unitest只找到一次我的单一测试方法?

2024-09-28 21:23:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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中找到的测试(因为附加的和必需的设置功能)。我怎样才能做到这一点?你知道吗

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


Tags: pytest功能脚本定义mainpassunittest
1条回答
网友
1楼 · 发布于 2024-09-28 21:23:21

Unittest库对TestCase子类属性进行迭代,查找以test_开头的方法。在Lower测试用例中,它从其父级继承了一个方法,因此它被执行两次—一次在Upper测试用例中执行,第二次在Lower类中执行。 如果这两个测试用例都要运行,那么我看到的唯一解决方案就是对Upper的另一个子类进行一个取出test_dummy测试

如果要在父类中运行测试,但在某些子类中跳过测试,请尝试以下操作:

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

更新:

我想现在我明白你想要什么了:你想要测试方法只在子类中运行。然后我建议您继承来自objectUpper,以及来自UpperTestCase的子类:

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

相关问题 更多 >