考虑以下示例:
module.py:
class LST:
x = [1]
class T:
def __init__(self, times):
self.times = times
def t1(self):
return LST.x * self.times
def t2(self):
return LST.x * (self.times+1)
def t3(self):
return LST.x * (self.times+2)
test.py:
from mock import patch
import unittest
import module
@patch('module.LST')
class TestM(unittest.TestCase):
@classmethod
def setUpClass(cls):
super(TestM, cls).setUpClass()
cls.t = module.T(1)
def test_01(self, LST):
LST.x = [2]
self.assertEqual([2], self.t.t1())
def test_02(self, LST):
LST.x = [2]
self.assertEqual([2, 2], self.t.t2())
def test_03(self, LST):
LST.x = [2]
self.assertEqual([2, 2, 2], self.t.t3())
我只想用补丁修改LST
类,因为同一修改将用于所有测试。
是否只能修改一次,然后将其重新用于所有方法?因此,我不需要在每个方法调用上都进行LST.x = [2]
来重复自己吗?
答案 0 :(得分:2)
怎么样:
from mock import patch
import unittest
import module
class TestM(unittest.TestCase):
@classmethod
def setUpClass(cls):
super(TestM, cls).setUpClass()
cls.t = module.T(1)
cls.patcher = patch('module.LST')
LST = cls.patcher.start()
LST.x = [2]
@classmethod
def tearDownClass(cls):
cls.patcher.stop()
def test_01(self):
self.assertEqual([2], self.t.t1())
def test_02(self):
self.assertEqual([2, 2], self.t.t2())
def test_03(self):
self.assertEqual([2, 2, 2], self.t.t3())
基本思想是您可以手动控制修补行为。