Как смоделировать метод из экземпляра, который возвращается другой функцией - PullRequest
1 голос
/ 02 марта 2020

Интересно, как можно смоделировать метод verify_token в функции create_bucket, чтобы он вызывал исключение.

other_module.py

# ...

def get_connection(backend=None, **kwargs):
    klass = import_string(backend or settings.BACKEND)
    return klass(**kwargs)

module.py

from other_module import get_connection


def create_bucket():
    conn = get_connection()

    # ...

    try:
        conn.verify_token()
    except VerificationFailed:
        #...

tests.py

Тесты выдают сообщение об ошибке

AttributeError: module.create_bucket.get_connection does not have the attribute 'verify_token'
def test_create_bucket_with_failed_verification(mocker):
    mocker.patch.object(
        "module.get_connection",
        "verify_token",
        side_effect=VerificationFailed
    )

1 Ответ

0 голосов
/ 02 марта 2020

Я решил это, издеваясь над всей get_connection функцией:

mocker.patch(
    "module.get_connection",
    return_value=mocker.Mock(verify_token=mocker.Mock(side_effect=VerificationFailed)),
)
...