我试图模拟一个类函数,该函数在其中使用 c 扩展类,如下所示,但我得到 TypeError: can't set attribute ofbuilt-in/extension type 'y.cExtensionClass'
。
code.py 是遗留代码,我真的不想更改它。有什么建议吗?
代码.py:
from x.y import cExtensionClass
class CodeClass():
@staticmethod
def code_function():
cExtensionClass().cExtensionFunc()
测试.py:
import code
from x.y import cExtensionClass
class test(unittest.TestCase):
def test_code_function(self)
with patch.object(cExtensionClass, 'cExtensionFunc') as cExtensionFuncMock:
cExtensionFuncMock.return_value = None
code.CodeClass.code_function()
cExtensionFuncMock.assert_called_with()
谢谢
最佳答案
修补code.cExtensionClass
(不是x.y.cExtensionClass
)。
执行导入代码
,而不是从代码cExtensionClass
。
import unittest
from mock import patch, Mock
import code
class test(unittest.TestCase):
def test_code_function(self):
with patch('code.cExtensionClass') as m:
m.return_value.cExtensionFunc = func = Mock()
code.CodeClass.code_function()
func.assert_called_with()
#@patch('code.cExtensionClass')
#def test_code_function(self, m):
# m.return_value.cExtensionFunc = func = Mock()
# code.CodeClass.code_function()
# func.assert_called_with()
关于python - 在Python中,如何模拟c扩展类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17267587/