我的班级就像
import a
class Demo(object):
def __init__(self):
......
fun_return_value = a.methodB()
......
def methodA(self):
......
测试类如下
class TestDemo(test.TestCase):
def setUp(self):
super(TestDemo, self).setUp()
def test_methodA(self):
......
当我要进行methodA的单元测试时,有一个问题,我必须模拟a.methodB。但是我该怎么做?我检查了一下文档,却一无所获。
问其他人,并在类TestDemo的开头使用@mock.patch("a.methodB")
。就像
@mock.patch("a.methodB")
class TestDemo(test.TestCase):
def setUp(self, mock_methodB):
super(TestDemo, self).setUp()
mock_methodB.return_value=None
def test_methodA(self):
......
但是它不起作用。如何模拟“ init ”方法所调用的方法?
答案 0 :(得分:1)
找到了解决方法。
class TestDemo(test.TestCase):
def setUp(self):
super(TestDemo, self).setUp()
self.mocks = [mock.patch('a.methodB',
mock.MagicMock(return_value=None))]
for single_mock in self.mocks:
single_mock.start()
self.addCleanup(single_mock.stop)
答案 1 :(得分:0)
修补程序可以用作TestCase类装饰器。它通过装饰类中的每个测试方法来工作。当您的测试方法共享一个公共补丁集时,这会减少样板代码。 patch()通过查找以patch.TEST_PREFIX开头的方法名称来查找测试。默认情况下,这是“测试”
来自the docs。这就是为什么您的代码无法正常工作的原因。相反,您可以使用start and stop methods。