используя mocker для патча с pytest - PullRequest
0 голосов
/ 22 ноября 2018

Я установил pytest-mock и пытаюсь использовать mocker для работы, как это делает патч, но я получаю «Ошибка типа: Нужна правильная цель для патча. Вы указали« return a + b »»

   # test_capitalize.py
   import time


 def sum( a, b):
    time.sleep(10)
    return a + b

 def test_sum(mocker):
    mocker.patch('return a + b');
    assertEqual(sum(2,3), 9)

1 Ответ

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

patch требуется путь к исправляемой функции.Вы могли бы сделать что-то вроде этого:

import pytest


def sum(a, b):
    return a + b


def test_sum1(mocker):
    mocker.patch(__name__ + ".sum", return_value=9)
    assert sum(2, 3) == 9


def test_sum2(mocker):
    def crazy_sum(a, b):
        return b + b

    mocker.patch(__name__ + ".sum", side_effect=crazy_sum)
    assert sum(2, 3) == 6

Результат:

$ pytest -v patch_test.py
============= test session starts ==============
platform cygwin -- Python 3.6.4, pytest-3.10.1, py-1.7.0, pluggy-0.8.0 -- /usr/bin/python3
cachedir: .pytest_cache
rootdir: /home/xyz/temp, inifile:
plugins: mock-1.10.0, cov-2.6.0
collected 2 items

patch_test.py::test_sum1 PASSED          [ 50%]
patch_test.py::test_sum2 PASSED          [100%]

=========== 2 passed in 0.02 seconds ===========
...