在 Python 中使用 h5py 返回字典进行模拟

Mocking with h5py returning dictionary in Python

我在函数中有以下内容:

import h5py

with h5py.File(path, 'r') as f:
    big = f['big']
    box = f['box']

我目前正在为尝试模拟它的函数编写测试 通过类似的东西:

def test_function(mocker):
    mocker.patch("h5py.File", new=mocker.mock_open())
    ...

嘲笑者来自哪里:https://pypi.org/project/pytest-mock/

我想要实现的是 mock 到 return 我一个 dict 的 [=26] =]f 这样我就可以与它进行交互,例如在上面的函数中。

这可能吗,我准备使用任何可能的暴力解决方案...

br。 KJ

所述,您需要确保 h5py.File().__enter__() returns 的结果是一个合适的字典:

from unittest import mock
import h5py
import pytest


def foo():
    with h5py.File('.', 'r') as f:
        big = f['big']
        box = f['box']

    return big, box


def test_foo(mocker):
    d = {'big': 1, 'box': 2}

    m = mocker.MagicMock()
    m.__enter__.return_value = d

    mocker.patch("h5py.File",
                 return_value=m)

    assert foo() == (1,2)