单元测试setUp/tearDown进行多次测试

swa*_*wan 107 python unit-testing

是否有一个在测试场景的开头/结尾触发的函数?函数setUp和tearDown在每次测试之前/之后触发.

我通常想拥有这个:

class TestSequenceFunctions(unittest.TestCase):

    def setUpScenario(self):
        start() #launched at the beginning, once

    def test_choice(self):
        element = random.choice(self.seq)
        self.assertTrue(element in self.seq)

    def test_sample(self):
        with self.assertRaises(ValueError):
            random.sample(self.seq, 20)
        for element in random.sample(self.seq, 5):
            self.assertTrue(element in self.seq)

    def tearDownScenario(self):
        end() #launched at the end, once
Run Code Online (Sandbox Code Playgroud)

现在,这些setUp和tearDown是单元测试并在我的所有场景中传播(包含许多测试),一个是第一个测试,另一个是最后一个测试.

Dav*_*nts 124

作为(每2.7 文档)你setUpClasstearDownClass分别运行前,在给定的类中的测试后执行.或者,如果您在一个文件中有一组,则可以使用setUpModuletearDownModule(文档).

否则,最好的选择可能是创建自己的派生TestSuite并覆盖run().所有其他调用将由父进程处理,并且运行将调用您的设置和拆除代码围绕父进程的调用run.


Cur*_*ner 51

我有相同的场景,对我来说setUpClass和tearDownClass方法完美无缺

import unittest

class Test(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls._connection = createExpensiveConnectionObject()

    @classmethod
    def tearDownClass(cls):
        cls._connection.destroy()
Run Code Online (Sandbox Code Playgroud)

  • 应该将其更新为可接受的答案,因为它显示了正确的示例,并且为了正常工作这些功能必须作为类方法,在可接受的答案中未提及。 (4认同)

小智 6

这是一个示例:3 个测试方法访问一个共享资源,该资源创建一次,而不是每个测试。

import unittest
import random

class TestSimulateLogistics(unittest.TestCase):

    shared_resource = None

    @classmethod
    def setUpClass(cls):
        cls.shared_resource = random.randint(1, 100)

    @classmethod
    def tearDownClass(cls):
        cls.shared_resource = None

    def test_1(self):
        print('test 1:', self.shared_resource)

    def test_2(self):
        print('test 2:', self.shared_resource)

    def test_3(self):
        print('test 3:', self.shared_resource)

Run Code Online (Sandbox Code Playgroud)