setUp和tearDown方法是为每个方法运行还是在TestCas的开始和结尾运行

2024-09-30 04:35:15 发布

您现在位置:Python中文网/ 问答频道 /正文

属于同一测试用例的测试方法是否会相互影响?在

在pythonunittest中,我试图理解,如果我在一个测试方法中更改了一个变量,那么这个变量在其他测试方法中是否会发生变化。或者对每个方法运行setUp和tearDown方法,然后为每个方法重新设置变量?在

我是说

AsdfTestCase(unittest.TestCase):
    def setUp(self):
        self.dict = {
                     'str': 'asdf',
                     'int': 10
                    }
    def tearDown(self):
        del self.dict

    def test_asdf_1(self):
        self.dict['str'] = 'test string'

    def test_asdf_2(self):
        print(self.dict)

所以我要问的是哪个输出test_asdf_2()“asdf”“测试字符串”


Tags: 方法testselfdefsetup测试用例unittesttestcase
2条回答

每个测试用例都是独立的真实的。setup方法在每个测试用例之前运行,teardown在每个测试用例之后运行。在

所以为了回答您的问题,如果您更改测试用例中的一个变量,它不会影响其他测试用例。在

编写测试代码是正确的。当你自己做的时候,这总是一个更好的学习体验。不过,这是你的答案。在

示例代码:

import unittest

class AsdfTest(unittest.TestCase):
  def setUp(self):
    print "Set Up"
    self.dict = {
      'str': 'asdf',
      'int': 10
    }

  def tearDown(self):
    print "Tear Down"
    self.dict = {}

  def test_asdf_1(self):
    print "Test 1"
    self.dict['str'] = 'test string'
    print self.dict

  def test_asdf_2(self):
    print "Test 2"
    print self.dict

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

输出:

^{2}$

您可以看到setup方法是在每个测试之前运行的。然后在每次测试后运行“拆卸”方法。在

是的,setUp和tearDown在testcase类中的每个测试(即名称中以“test”开头的函数)之前运行。考虑这个例子:

# in file testmodule
import unittest

class AsdfTestCase(unittest.TestCase):
    def setUp(self)      : print('setUp called')
    def tearDown(self)   : print('tearDown called')
    def test_asdf_1(self): print( 'test1 called' )
    def test_asdf_2(self): print( 'test2 called' )

从命令行调用它:

^{2}$

(因此,是的,在您的示例中,由于重新执行设置,它将触发“asdf”,覆盖由测试2引起的更改)

相关问题 更多 >

    热门问题