2

次のように、内部で ac 拡張クラスを使用するクラス関数をモックしようとしていますが、TypeError: can't set attributes of built-in/extension type 'y.cExtensionClass'. code.py はレガシー コードであり、私はむしろそれを変更したくありません。なにか提案を?

コード.py:

from x.y import cExtensionClass

class CodeClass():

    @staticmethod
    def code_function():
         cExtensionClass().cExtensionFunc()

test.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()

ありがとう

4

3 に答える 3

3

パッチcode.cExtensionClass(ではないx.y.cExtensionClass)。import codeの代わりに行うfrom code 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()
于 2013-06-24T07:11:00.093 に答える