python单元测试中setUp / tearDown的顺序是什么?

时间:2015-08-21 17:31:11

标签: python unit-testing python-unittest

我对python中基本的unittest方法有所了解。鉴于以下测试文件:

import unittest, sys


class TestStringMethods(unittest.TestCase):

    def setUp(self):
        self.mystring = "example string"

    def tearDown(self):
        del self.mystring

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        with self.assertRaises(TypeError):
            s.split(2)

我的理解基于我读过的内容(“TestCase中名为setUp的方法,在每个测试方法之前自动运行。”,http://gettingstartedwithdjango.com/en/lessons/testing-microblog/#toc1等)我解释事件的顺序,如:

1. set up self.mystring
2. run test_upper
3. tear down self.mystring

4. set up self.mystring
5. run test_isupper
6. tear down self.mystring

7. set up self.mystring
8. run test_split
9. tear down self.mystring

我的同事将文件解释为单位测试的工作原理如下:

1. set up self.mystring
2. run test_upper
3. run test_isupper
4. run test_split
5. tear down self.mystring

这是一个非常重要的区别,哪一个是对的?

3 个答案:

答案 0 :(得分:3)

Python Unittest Docs

你是关于setUp和tearDown的,他们在该类中的每个测试方法之前和之后运行。但是你的同事可能一直在想setUpClass和tearDownClass,它们会在执行类中的任何测试方法之前运行一次,并且分别在完成所有测试方法之后运行。

答案 1 :(得分:2)

你是对的。设置和拆卸方法在每个测试用例之前和之后运行。这确保了每个测试都是孤立运行的,因此测试顺序并不重要。在一次测试期间创建的在一次测试期间更改的对象将针对每个测试重新创建,因此测试不会相互影响。

答案 2 :(得分:1)

如果您需要在所有案例之前设置一次并在所有案例之后将其拆除,则可以使用setUpClass / tearDownClass方法。但大多数情况下,您需要所描述的行为,以便单元测试不会相互干扰或相互依赖。