【问题标题】:Running only the tests of a specific file仅运行特定文件的测试
【发布时间】:2012-05-17 13:19:35
【问题描述】:

我有两个包含单元测试的文件,第二个文件上的测试扩展并覆盖了第一个文件上的一些测试。

用一个非常简单的例子来说明。有tests1.py

import unittest

class A(unittest.TestCase):
    def setUp(self):
        print "setup stuff A"

    def test_stuff(self):
        print "test stuff A"

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

还有tests2.py:

import unittest
from tests1 import A

class B(A):
    def setUp(self):
        print "setup stuff B"

    def test_stuff(self):
        print "test stuff B"

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

我希望能够单独运行每个文件,或者一次运行整个文件集。而且我不想手动创建不同的套件,我必须手动指定要运行的测试集......

但是...在上面的示例中,当我运行python tests2.py 时,tests1.py 的测试也运行了!当我批量运行它们时,它们运行了两次。我理解这是因为我从tests2.py 导入A。我怎样才能避免这种情况?有没有我应该遵循的最佳实践?

我实际上是从 PyCharm 运行测试,但我想这可能不相关,因为我可以重现从命令行运行测试的相同问题。

【问题讨论】:

    标签: python unit-testing pycharm


    【解决方案1】:

    将通用代码拆分成另一个不继承自unittest.TestCase的类:

    class Parent(object):
        pass # common stuff goes here
    
    class A(Parent, unittest.TestCase):
        pass # A stuff here
    
    class B(Parent, unittest.TestCase):
        pass # B stuff here
    

    【讨论】:

    • 可行,即使不理想...因为每对类 AB 都会有一个新的 Parent 类。我需要几十个案例的共享测试实现,所以会有很多新的类
    • 我已经编辑了您的示例,以便在AB 中我们可以覆盖Parent 中定义的setUp()。否则,调用 super() 时会调用 TestCase.setUp(),而不是预期的 Parent.setUp()
    猜你喜欢
    • 1970-01-01
    • 2021-11-15
    • 2022-01-22
    • 2021-01-07
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    相关资源
    最近更新 更多