在 Python whl 文件中模拟一个函数

Mock a function in a Python whl file

我正在尝试为调用 .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'

我的目录结构是这样的

源码
|车轮
|........ 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.

有什么想法吗?谢谢

使用 mocker.patch 时,您必须提供 Python 您正在模拟的对象的导入路径,而不是相对文件系统路径。

由于 wheel_function 包含在模块 my_package 中,您需要将模拟程序设置为

my_mock = mocker.patch(
    "my_package.wheel_function", 
    side_effect=mock_wheel_function
)