Макет функции в Python whl файле - PullRequest
2 голосов
/ 04 марта 2020

Я пытаюсь написать тест для функции, которая вызывает функцию в файле .whl, но я пытаюсь смоделировать функцию в колесе. У меня установлено колесо в моей виртуальной среде - я установил колесо с pip install my_wheel.whl, находясь в среде. Пакет, который находится в колесе, называется my_package.

Функция , которую я хочу проверить , выглядит примерно так:

from my_package import wheel_function

def my_func():
   x = wheel_function()
   return x + 5 

Я хочу издеваться wheel_function так что тест просто смотрит на my_func.

Мой тестовый скрипт :

import pytest

def mock_wheel_function():
    return 5

def test_my_func(mocker):
   my_mock = mocker.patch("src.wheels.my_wheel.path.to.wheel_function", 
                          side_effect=mock_wheel_function)
   # (Do stuff)

Я получаю следующую ошибку: AttributeError: module 'src.wheels' has no attribute 'my_wheel'.

Моя структура каталогов это так.

ср c
| колеса
| ........ my_wheel.whl
| модули
| ........ my_module

тесты
| - test_modules
| ........ test_my_module


Если я попытаюсь передать путь к модулю в виртуальной среде (то есть /Users/me/venv/lib/python3.7/site-packages/....), я получу ModuleNotFoundError: module '/Users/me/venv/lib/python3' not found.

Есть идеи? Спасибо

1 Ответ

3 голосов
/ 04 марта 2020

При использовании mocker.patch необходимо указать путь импорта Python к объекту, над которым вы работаете, а не относительный путь файловой системы.

Поскольку wheel_function содержится в модуле my_package, вы хотите настроить ваш макер как

my_mock = mocker.patch(
    "my_package.wheel_function", 
    side_effect=mock_wheel_function
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...