我感兴趣的是修补一个文件中另一个方法调用的方法。示例 - original.py文件包含 -
def A():
a = 10
b = 5
return a*b;
def B():
c = A()
return c* 10
我想为这个文件编写单元测试,比如叫它test.py
import mock
import unittest
class TestOriginal(unitest.TestCase):
def test_Original_method(self):
with patch(''):
如何使用补丁和模拟模块来测试original.py。我希望A()总是返回MagicMock()对象而不是整数。
答案 0 :(得分:1)
您只需在被测模块中修补A
全局。我在这里使用@patch
装饰器语法:
import mock
import unittest
import module_under_test
class TestOriginal(unitest.TestCase):
@patch('module_under_test.A')
def test_Original_method(self, mocked_A):
mocked_A.return_value = 42
result = module_under_test.B()
mocked_A.assert_called_with()
self.assertEqual(result, 420)
这会传递MagicMock
的{{1}}模拟对象作为测试方法的额外参数。
请注意,我们在此处明确命名了模块。您也可以使用A()
,只需在模块上命名属性(这是您的模块全局变量):
patch.object()
当然,您仍然可以使用class TestOriginal(unitest.TestCase):
@patch.object(module_under_test, 'A')
def test_Original_method(self, mocked_A):
mocked_A.return_value = 42
result = module_under_test.B()
mocked_A.assert_called_with()
self.assertEqual(result, 420)
声明:
with