使用非标准库模拟读取文件

问题描述 投票:0回答:1

我想设置一个测试并模拟一个从文件中读取属性的调用。我正在使用非标准库

h5py
,但这个问题可能适用于其他数据读取库。例如,我尝试模拟的代码如下所示:

import h5py

with h5py.File('/my/data.h5') as f:
    assert f.attrs['short_name'] == 'expected_output'

此参考展示了如何使用

mock_open
将一些文本修补到读取的文件中,但是如何修补更复杂的Python数据结构呢?

如果更简单,我不一定需要获取

h5py
数据结构,我只需要修补对
f.attrs['short_name']
的调用将返回特定的字符串值。有谁知道有什么方法可以做到这一点吗?

python testing mocking h5py
1个回答
0
投票

我会采用这种方法,至少在一开始是这样的:

def test_get_instruments(self, mocker):
    db = mocker.Mock()
    sess = Session()
    mocker.patch.object(db, "get_session", return_value=sess)
    mocker.patch.object(db, "select", return_value=[{"id": 1}])

    resp = get_data(db, req.dict())

    db.get_session.assert_called_once()
    db.select.assert_called_once_with(sess, DataType)

逐步:

  1. 创建一个可以模仿任何行为的模拟对象
  2. 使用 patch 添加一些具有可能返回类型的 fake
  3. 方法
  4. 检查模拟是否已按照您期望的方式被调用

如果你想测试一些 h5py 内部结构,你可能会遵循类似的道路

© www.soinside.com 2019 - 2024. All rights reserved.