python - 在Python中,如何模拟c扩展类?

标签 python testing mocking typeerror

我试图模拟一个类函数,该函数在其中使用 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/

相关文章:

python - 函数中的模拟变量

python - 如何创建 "serialized"版本的模型?

python - 使用 split (' ' 拆分命令行是否有问题?

performance - Web 应用程序负载测试的最佳实践和文献

testing - 触发 Backbone 模型事件不会在我的 Jasmine spy 中注册

javascript - 试图模拟 API 响应延迟 : Cannot read property 'then' of undefined

python - 检查一个字符串的字符是否按字母顺序升序并且它的升序是均匀间隔的python

Python日期时间与<比较返回错误结果

c# - 如何在 StepArgumentTransformation 中使用 REGEX 查找带前缀的字符串

javascript - 具有外部依赖性的单元测试 ES6 类