我想模拟一个方法来在我的一个模拟类中返回一个测试值。我遇到的问题是返回测试值,而mocked方法返回一个MagicMock类型的对象。
代码非常人为,但说明了问题。
SuT(sut.py):
provider = None
class Provider():
def get_data(self):
return 'production data'
def get_provider():
return Provider()
def setup_provider():
global provider
provider = get_provider()
def do_worker():
return provider.get_data()
测试(mocking.py):
import unittest
from mock import MagicMock
import sut
class TestWorker(unittest.TestCase):
def test_worker(self):
provider_mock = MagicMock()
provider_mock.get_data.return_value = 'test data'
sut.get_provider = MagicMock(name='get_provider').return_value = provider_mock
sut.setup_provider()
data = sut.do_worker()
# data comes back as type MagicMock
assert data == 'test data'
答案 0 :(得分:2)
您对链式任务感到困惑:
sut.get_provider = MagicMock(name='get_provider').return_value = provider_mock
该作业将provider_mock
和绑定到sut.get_provider
。
换句话说,它基本上是这样做的:
MagicMock(name='get_provider').return_value
那不是你想要的。现在sut.get_provider = provider_mock
MagicMock(name='get_provider').return_value = provider_mock
调用sut.get_provider
并返回一个新的provider_mock
对象,而不是原始的MagicMock
对象。
分开作业:
provider_mock