![](/img/trans.png)
[英]How to use setUp and tearDown in python unittest for this class
[英]Unittest setUp/tearDown for several tests
是否有在测试场景开始/结束时触发的函数? 在每次测试之前/之后都会触发 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
就目前而言,这些setUp和tearDown是单元测试,并在我的所有场景中传播(包含许多测试),一个是第一个测试,另一个是最后一个测试。
我有同样的场景,对我来说 setUpClass 和 tearDownClass 方法工作完美
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls._connection = createExpensiveConnectionObject()
@classmethod
def tearDownClass(cls):
cls._connection.destroy()
这是一个示例: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)
对于 python 2.5,和 pydev 一起工作时,有点困难。 pydev 似乎没有使用测试套件,而是找到所有单独的测试用例并分别运行它们。
我的解决方案是使用这样的类变量:
class TestCase(unittest.TestCase):
runCount = 0
def setUpClass(self):
pass # overridden in actual testcases
def run(self, result=None):
if type(self).runCount == 0:
self.setUpClass()
super(TestCase, self).run(result)
type(self).runCount += 1
使用这个技巧,当你从这个TestCase
继承(而不是从原来的unittest.TestCase
)时,你也会继承 0 的runCount
。然后在 run 方法中,子测试用例的runCount
被检查并递增。 这使得runCount
变量为 0。
这意味着setUpClass
每个类只会运行一次,而不是每个实例运行一次。
我还没有tearDownClass
方法,但我想可以使用该计数器来做一些事情。
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.shared_data = "dddd"
@classmethod
def tearDownClass(cls):
cls.shared_data.destroy()
def test_one(self):
print("Test one")
def test_two(self):
print("Test 2")
更多信息请访问Python 单元测试文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.