pytest & monkeypatching - не может получить возвращаемое значение - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь смоделировать возвращаемое значение для функции, которую я вызываю, с помощью pytest и monkeypatching.

Я установил прибор для своего ложного класса, и я пытаюсь«перезаписать» один из методов в указанном классе.

from foggycam import FoggyCam
from datetime import datetime

@pytest.fixture
def mock_foggycam():
    return Mock(spec=FoggyCam)

def test_start(mock_foggycam, monkeypatch):
    def get_mock_cookie():
        temp = []
        temp.append(Cookie(None, 'token', '000000000', None, None, 'somehost.com', 
            None, None, '/', None, False, False, 'TestCookie', None, None, None))
        return temp

    monkeypatch.setattr(FoggyCam, 'get_unpickled_cookies', get_mock_cookie)

    cookies = mock_foggycam.get_unpickled_cookies()
    mock_foggycam.get_unpickled_cookies.assert_called_with()

    for pickled_cookie in cookies:
        mock_foggycam.cookie_jar.set_cookie(pickled_cookie)

Однако я могу что-то упустить, потому что вызов assert_called_with выдает ошибку:

________________________________________________________________ test_start ________________________________________________________________

mock_foggycam = <Mock spec='FoggyCam' id='4408272488'>, monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x106c0e5c0>

    def test_start(mock_foggycam, monkeypatch):
        def get_mock_cookie():
            temp = []
            temp.append(Cookie(None, 'token', '000000000', None, None, 'somehost.com',
                None, None, '/', None, False, False, 'TestCookie', None, None, None))
            return temp

        monkeypatch.setattr(mock_foggycam, 'get_unpickled_cookies', get_mock_cookie)

        cookies = mock_foggycam.get_unpickled_cookies()
>       mock_foggycam.get_unpickled_cookies.assert_called_with()
E       AttributeError: 'function' object has no attribute 'assert_called_with'

Есть ли что-то вмоя логика обезьяны, которую я неуместен?

1 Ответ

0 голосов
/ 30 ноября 2018

Следите за моими комментариями.В основном вы пытаетесь создать макет, который ведет себя как макет (так что assert_called_with доступен), а также выполняет ваш get_mock_cookie (функция).

Это то, что делает аргумент wraps.Документировано здесь: https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock

Вы можете попробовать что-то вроде этого:

monkeypatch.setattr(mock_foggycam, "get_unpickled_cookies", Mock(wraps=get_mock_cookie)) 

Ошибка, которую вы получаете, в основном говорит вам, что вы пытались вызвать assert_called_with для функцииобъект (ваш get_mock_cookie).

...