python unittest方法

时间:2010-08-09 22:59:36

标签: python unit-testing

我可以在python的测试类中调用测试方法吗?例如:


class Test(unittest.TestCase):
    def setUp(self):
        #do stuff

    def test1(self):
        self.test2()

    def test2(self):
        #do stuff

更新:我忘记了问题的另一半。只有在测试人员调用的方法之后才会调用setup或teardown吗?或者它会在test1进入和从test1调用test2之后被调用吗?

5 个答案:

答案 0 :(得分:8)

这几乎是不要那样做。如果您希望按特定顺序运行测试,请定义runTest方法,不要将方法命名为test...

class Test_Some_Condition( unittest.TestCase ):
def setUp( self ):
    ...
def runTest( self ):
    step1()
    step2()
    step3()
def tearDown( self ):
    ...

这将使用一(1)个setUp和一(1)个tearDown按顺序运行这些步骤。没有神秘感。

答案 1 :(得分:6)

尝试运行以下代码:

import unittest

class Test(unittest.TestCase):
    def setUp(self):
        print 'Setting Up'

    def test1(self):
        print 'In test1'
        self.test2()

    def test2(self):
        print 'In test2'

    def tearDown(self):
        print 'Tearing Down'

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

结果是:

Setting Up
In test1
In test2
Tearing Down
.Setting Up
In test2
Tearing Down
.
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

现在您看到,setUp在测试方法被单元测试调用之前被调用,并且在调用后调用tearDown

答案 2 :(得分:1)

名称以字符串'test'开头的所有方法都被视为单元测试(即,当您调用unittest.main()时,它们会运行)。因此,您可以在Test类中调用方法,但是您应该将其命名为不以字符串'test'开头的内容,除非您希望它也作为单元测试运行。

答案 3 :(得分:0)

确定,为什么不 - 但是这意味着test2将被调用两次 - 一次由test1调用,然后再次作为自己的测试,因为所有名为test的函数都将被调用。

答案 4 :(得分:0)

两者都是:

    每次测试之间都会调用
  • setUp
  • test2将被调用两次。

如果您想在测试中调用函数,请省略test前缀。