我正在尝试在Python中编写一个测试,检查我正在编写的类中的某个方法是否为某个Hdf文件中的数据集设置了属性值。逻辑如下:类的实例通过传递h5py.File的实例来构造,然后一个方法在该文件内创建数据集。在下一步中,我有另一种方法来为这个数据集设置特定的属性。测试是否有一些字段已在python中初始化
什么我想测试,如果我的类方法create_attributes(个体经营,属性)领域hdf_file [dset_name] .attrs [attr_name]设置对在属性变量通过一定的价值。但是,我想避免实际创建一个Hdf文件。到目前为止,我试图嘲笑一个hdf文件的实例并使用它。最低工作代码示例是以下几点:
import h5py
class TestSomething:
@mock.patch('h5py.File')
def test_if_attr_is_initialized(self,mock_hdf):
# Here I would like to call a function that basically executes
# the following line:
mock_hdf['test_dset'].attrs['test_field']='value'
# Then I want to check if the attribute field has been assigned
assert mock_hdf['test_dset'].attrs['test_field']=='value'
任何人可以帮助我找到了正确的事情,以检查是否在HDF文件属性的设置是否正确?任何帮助将不胜感激,我是所有嘲笑技术的完全新手。
编辑:
在下面我提供了两个类,以及相应的测试最小的代码示例作为requeseted由二战:
import h5py
class HdfWriter():
def __init__(self,hdf_file):
self.hdf_file=hdf_file
def create_attrs(self,attributes):
dset_name=attributes.keys()[0]
attrs=attributes[dset_name]
for key in attrs:
self.hdf_file[dset_name].attrs[key]=attrs[key]
请注意这里是一个真正的HDF文件我首先必须创建一个数据集,但是我想将其留给另一个测试。下面的测试应该只是检查一下,是否为一个虚构的HDF文件,其中有数据集test_dset此数据集的属性写入:
import h5py
import HdfWriter
class TestSomething:
@mock.patch('h5py.File')
def test_if_attr_is_initialized(self,mock_hdf):
writer=hw.HdfWriter(mock_hdf)
attr={'test_dset':{'test_field':'test_value'}}
writer.create_attrs(attr)
assert writer.hdf_file['test_dset'].attrs['test_field']=='value'
您可能没有发布足够的信息。似乎你想嘲笑/修补未绑定的类方法和/或属性。你可以发布一个最小的例子吗? – wwii 2014-09-25 12:10:16
感谢您的快速响应...我现在已经为班级和相应的测试发布了一个最小示例。我发布的类不起作用,它需要另一种创建数据集的方法。为了测试,我想避免涉及创建数据集的功能。 – Chris 2014-09-25 12:27:14
你问如何模拟一个'''h5py.File'',以便它有一个attrs属性的数据集项?或者你是否要求测试'''create_attrs'''的最佳方式? – wwii 2014-09-25 19:04:25