Python 多个测试的单元测试设置/拆卸
是否存在在测试场景开始/结束时启动的函数?每次测试之前/之后都会触发函数setUp和tearDown 我通常希望这样:Python 多个测试的单元测试设置/拆卸,python,unit-testing,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(sel
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都是单元测试,在我的所有场景中(包含许多测试),一个是第一个测试,另一个是最后一个测试。从2.7(per)开始,您会得到setUpClass
和tearDownClass
,它们分别在给定类中的测试运行之前和之后执行。或者,如果在一个文件中有一组,则可以使用setUpModule
和tearDownModule
()
否则,您最好的选择可能是创建自己的派生并重写
run()
。所有其他调用都将由父级处理,run将围绕调用父级的run
方法调用设置和拆卸代码。我有相同的场景,对我来说,setUpClass和tearDownClass方法工作得非常好
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls._connection = createExpensiveConnectionObject()
@classmethod
def tearDownClass(cls):
cls._connection.destroy()
对于Python2.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的运行计数。然后在run方法中,检查并增加子testcase的runCount
。这使得该类的runCount
变量为0
这意味着setUpClass
将只在每个类中运行一次,而不是在每个实例中运行一次
我还没有一个tearDownClass
方法,但是我想使用这个计数器可以做一些事情。这里有一个例子:3个测试方法访问一个共享资源,它只创建一次,而不是每次测试
导入单元测试
随机输入
类TestSimulateLogistics(unittest.TestCase):
共享资源=无
@类方法
def设置等级(cls):
cls.shared_resource=random.randint(1100)
@类方法
def拆卸类(cls):
cls.shared_资源=无
def测试_1(自身):
打印('test 1:',self.shared_资源)
def测试_2(自身):
打印('test 2:',self.shared_资源)
def测试_3(自身):
打印('test 3:',self.shared_资源)
有关更多信息,请访问哪个版本?unittest模块已经扩展,在Python 2.7.2.7中包含了模块设置和模块拆卸,还引入了setUpClass()和tearDownClass()类方法,这将使您在同一文件中有多个类,每个类都有自己的设置和拆卸。您也可以将其更新为可接受的答案,因为它显示了一个正确的示例,并且这些函数必须是classmethods才能工作,这在可接受的答案中没有提及。是。很好。setUpClass对所有三个测试用例只执行一个。
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")