我在尝试修补静态方法时遇到问题,无论我尝试了什么,原始方法仍在运行。我将在下面举例说明
归档
import B
from unittest.mock import patch
from unittest import mock
import asynctest
import unittest
class Test(asynctest.TestCase):
@patch('B.OT._func')
async def test(self, mock_func):
mock_func.return_value = mock.MagicMock()
await B.foo()
mock_func.assert_called_once()
if __name__ == '__main__':
unittest.main()
文件B
from path.C import OT
async def foo():
print('B')
return OT._func()
路径(文件夹)/文件C
class OT:
@staticmethod
def _func():
print('c')
return True
问题
我在模拟OT.\u func()的返回值时遇到问题。无论我在文件A中尝试修补什么,都不会阻止_func()在类B中运行。如果运行测试用例,它会打印出“c”,而不是修补函数。我想要的结果是修补_func并让它返回其他内容
编辑:问题似乎出在测试的异步部分,如果异步被删除,它就会工作。目前的一个解决方法是使用上下文管理器版本(带关键字)来修补内容
在进一步研究之后,似乎是async和“@patch”装饰器(以及可能的python 3.7)的问题。一个简单的解决方法是在“with”关键字旁边使用补丁。这将绕过不适用于异步函数的补丁修饰符
或者,从python 3.7.2升级到3.8.2也解决了这个问题,并允许修补程序装饰程序使用异步函数
相关问题 更多 >
编程相关推荐