Python не может издеваться над вызовом API - PullRequest
0 голосов
/ 06 октября 2019

Я хочу смоделировать вызов API, который метод класса использует для внутреннего использования.

Пока у меня есть это:

@mock.patch("time.perf_counter", side_effect=lambda: 4)
def test_response_expiration(response_store):
    response_store.ttl = 2
    responses = [
        Response(status=200, url="foo", response_time=10, timestamp=1),
        Response(status=200, url="foo", response_time=10, timestamp=2),
    ]

    response_store.add(*responses) #add() uses time.perf_counter() internally 

Проблема в том, что когда я печатаю respone_store, я вижуследующий на стандартный вывод:

 <MagicMock name='time' id='4455108176'> 

Я не понимаю, почему это происходит - почему он высмеивает весь response_store объект? Я хочу, чтобы он издевался только time.perf_counter

Я запускаю тест с pytest

1 Ответ

0 голосов
/ 26 октября 2019

В определенном смысле это не совсем насмешливый объект response_store. Декоратор передает полученный макет из патча в вашу функцию. Поскольку вы не добавили в него другой параметр, как в

@mock.patch("time.perf_counter", side_effect=lambda: 4)
def test_response_expiration(response_store, my_mock):
    ...

, он назначает результирующий макет патча для первого параметра, response_store. Поскольку это макет, каждое дальнейшее использование или вызов response_store принимается за пластическое поведение макета .

...