在 python3 中使用 MagicMock 模拟 hdf5 文件和 hdf5 组

Simulate hdf5 file and hdf5 group with MagicMock in python3

我正在尝试模拟读取 python3 中的 hdf5 文件以进行测试。该函数控制文件是否包含所有必需的关键字。文件结构为:

我的计划是将 MagicMock 对象用于文件对象和组对象。

测试文件:

def test_checkInput(self):
    file = MagicMock()
    my_values = MagicMock()

    my_values.keys.return_value = ['A', 'B']
    file.keys.return_value = {'parent': my_values}

    self.assertTrue(reader_class.checkInput(file))

reader_class 是函数 checkInput(file) 所在的模块 已定义

reader_class - 文件

def checkInput(file):
    if not file.keys:
        return False

    if 'parent' in file.keys():
        group = file['parent']
        if 'A' in group.keys():
            if 'B' in group.keys():
                return True
            else:
                print(f"[ {__file__} ] : No Group: 'A'")
                return False
        else:
            print(f"[ {__file__} ] : No Group: 'B'")
            return False
    else:
        print(f"[ {__file__} ] : No Group: 'parent'")
        return False

问题是,group.keys() 并不像 checkInput 函数中预期的那样 return ['A', 'B']。它 return 是一个 MagicMock-Object。如何获取设定值?

问题是,reader_class 文件中的 MagicMock 对象不同。 file.keys() return 另一个模拟 file['parent'] 我找到了一个简单的解决方案: 在 Testfile 中只使用一个 MagicMock 对象并指定 return 值

def test_checkInput(self):
    file = MagicMock()    
    file.keys.return_value = 'parent'
    file['parent'].keys.return_value = ['A', 'B']

    self.assertTrue(reader_class.checkInput(file))