AttributeError:“功能”对象在Pytest Mock中没有属性

时间:2019-10-06 16:15:58

标签: python unit-testing mocking pytest attributeerror

我正在尝试测试是否在测试内调用了我的函数,但是我得到了:

AttributeError:“函数”对象没有属性“ assert_drawn_once”

我没有嘲笑这个正确的方法,所以请您帮我弄清楚为什么我的模拟在这种情况下不起作用。我有模拟该功能的正确路径。

我已经尝试过-> create_autospec来解决AttributeError,但是没有运气。

代码示例:

class MyClass:
    def __init__(self):
        self._data = {}

    def a(self, value):
        self._data = value

@pytest.fixture
def my_fixture():
    return MyClass()

@pytest.mark.asyncio
async def test_random_function(my_fixture, mocker):
    s = mocker.patch('path.module.a',
                              my_fixture.a)

    await random_function()
    s.assert_called_once()

1 个答案:

答案 0 :(得分:0)

测试功能中的

my_fixture.aMyClass.a函数,显然没有assert_called_once。那是unittest.mock.Mockunittest.mock.MagicMock中的method。我不知道为什么要用自己的对象修补path.module.a,但我想您将很难获得MagicMock提供的功能。在您的示例中,我将仅使用以下内容。

@pytest.mark.asyncio
async def test_random_function(my_fixture, mocker):
    s = mocker.patch('path.module.a')

    await random_function()
    s.assert_called_once()