Python单元测试方法

7 投票
5 回答
3696 浏览
提问于 2025-04-16 02:33

我可以在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 个回答

1

所有名字以 'test' 开头的方法都被认为是单元测试(也就是说,当你调用 unittest.main() 时,这些方法会被执行)。所以你可以在 Test 类里面调用其他方法,但如果你不想让这个方法也被当作单元测试执行,就应该给它起个名字,不要以 'test' 开头。

8

这基本上就是一个不要这样做的建议。如果你想让测试按照特定的顺序运行,应该定义一个runTest的方法,而不要把你的方法命名为test...

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

这样做会让步骤按顺序执行,并且只会有一次(1次)设置和一次(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 会在测试方法被 unittest 调用之前执行,而 tearDown 则是在调用之后执行。

撰写回答