1

コード:

class SomeClass(BaseClass):
    async def async_method(arg1, arg2, **kwargs):
        await self.foo.bar(arg1=arg1, arg2=arg2).baz(**kwargs)

使用したテストの 1 つ:

@pytest.fixture
def same_class():
    return SameClass()


async def test_async_method(some_class: SomeClass):
    arg1_mock = 1
    arg2_mock = 2
    some_class.foo.bar = AsyncMock()
    some_class.foo.bar.baz = AsyncMock()
    
    await some_class.async_method(arg1=arg1_mock, arg2=arg2_moc)
    
    some_class.foo.bar.assert_called_once()

エラーが発生します:

AttributeError: 'coroutine' object has no attribute 'baz'

AsyncMock に非同期属性メソッドを追加するには? どんな助けでも

4

1 に答える 1

1

ドキュメントから_AsyncMock

AsyncMockオブジェクトは非同期関数として認識され、呼び出しの結果が awaitable になるように動作します。

あなたのコードでbarは、 awaitable を返す async 関数です。awaitable がbaz属性で何かを返すようにするには、代わりに戻り値に設定します。

some_class.foo.bar = AsyncMock()
some_class.foo.bar.return_value.baz = AsyncMock()
于 2022-01-19T22:22:39.737 に答える