【问题标题】:subclassing python unittest.Testcase, calling the same main子类化python unittest.Testcase,调用相同的main
【发布时间】:2012-02-16 09:05:59
【问题描述】:

我想创建一个名为 BasicTest 的 python unittest.Testcase 的子类。我希望 BasicTest 的每个子类在 main 中运行相同的例程。我怎样才能做到这一点?

例子:

in basic_test.py:

class BasicTest(unittest.TestCase):

    ...


if __name__ == '__main__':
    # Do optparse stuff
    unittest.main()



in some_basic_test.py:

class SomeBasicTest(BasicTest):
    ...

if __name__ == '__main__':
    #call the main in basic_test.py

【问题讨论】:

标签: python syntactic-sugar


【解决方案1】:
# basic_test.py
class BasicTest(unittest.TestCase):

  @staticmethod
  def main():
     # Do optparse stuff
     unittest.main()

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



# some_basic_test.py
class SomeBasicTest(BasicTest):
   ...

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

【讨论】:

  • 如果一个测试模块中有多个类继承自BasicTest 怎么办?初始化代码 (BasicTest.main()) 将只运行一次,而不是在运行每个测试用例的方法之前。
【解决方案2】:

您不能(重新)将模块导入为新的ma​​in,因此if __name__=="__main__" 代码有点无法访问。

Dor 的建议或类似的东西似乎是最合理的。 但是,如果您无权访问相关模块,则可以考虑查看将模块作为 main 执行的 runpy.run_module()

【讨论】:

    【解决方案3】:

    我希望 BasicTest 的每个子类在 main 中运行相同的例程

    我猜你想要的是在从任何测试用例运行测试之前运行一些设置/初始化代码。在这种情况下,您可能对setUpClass 类方法感兴趣。

    testA.py

    import unittest
    
    
    class BasicTest(unittest.TestCase):
    
        @classmethod
        def setUpClass(cls):
            print 'Preparing to run tests'
    
    
    class TestA(BasicTest):
    
        def test1(self):
            print 'testA: test1'
    
        def test2(self):
            print 'testA: test2'
    
    
    if __name__ == '__main__':
        unittest.main()
    

    testB.py

    import unittest
    
    from testA import BasicTest
    
    
    class TestB(BasicTest):
    
        def test1(self):
            print 'testB: test1'
    
        def test2(self):
            print 'testB: test2'
    
    
    if __name__ == '__main__':
        unittest.main()
    

    testA.py 的输出:

    Preparing to run tests
    testA: test1
    testA: test2
    ..
    ----------------------------------------------------------------------
    Ran 2 tests in 0.000s
    
    OK
    

    testB.py 的输出:

    Preparing to run tests
    testB: test1
    testB: test2
    ..
    ----------------------------------------------------------------------
    Ran 2 tests in 0.000s
    
    OK
    

    【讨论】:

    • 在调用 unittest.main() 之前我必须做一些命令行参数解析,这就是为什么我不能只使用 setUpClass
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 2012-10-20
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多