gpt4 book ai didi

python - 修补 python 类之外的方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:28:22 26 4
gpt4 key购买 nike

我有兴趣修补一个文件中由另一种方法调用的方法。示例-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() 对象而不是整数。

最佳答案

您只需修补被测模块中的 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)

这会传入 A()MagicMock 模拟对象作为测试方法的额外参数。

请注意,我们在这里明确命名了该模块。您还可以使用 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 语句:

class TestOriginal(unitest.TestCase):
def test_Original_method(self):
with patch('module_under_test.A') as mocked_A:
mocked_A.return_value = 42
result = module_under_test.B()
mocked_A.assert_called_with()
self.assertEqual(result, 420)

关于python - 修补 python 类之外的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32260430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com