2

使用文件 IO 进行单元测试的正确方法是什么,尤其是涉及 PyTables 和 HDF5 时?

我的应用程序围绕在 hdf5 文件中存储和检索 python 数据而发展。到目前为止,我只是自己在单元测试中编写 hdf5 文件并加载它们以进行比较。问题是,我当然不能确定其他人在运行测试时是否有权将文件实际写入硬盘。(当我想使用像 Jenkins 这样的自动化测试框架时,这可能会变得更糟,但我还没有检查过)。

处理这些情况的正确方法是什么?在很可能授予写访问权限的特定位置创建 /tmp/ 文件夹是最佳做法吗?如果是这样,那在哪里?或者有没有一种简单直接的方法来模拟 PyTables 的写作和阅读?

非常感谢!

4

2 回答 2

1

从根本上说,HDF5 和 Pytables 是 I/O 库。它们为文件系统操作提供 API。因此,如果你真的想测试 PyTables / HDF5,你必须点击文件系统。没有办法解决这个问题。如果用户在系统上没有写入权限,则他们无法运行测试。或者至少他们无法进行实际测试。

您可以使用内存文件驱动程序进行测试。这对于加速大多数测试和测试更高级别的功能很有用。然而,即使你走这条路,你仍然应该有一些实际写出真实文件的测试。如果这些都失败了,你就知道出了点问题。

通常,人们在测试目录中创建临时 h5 文件。但是如果你真的担心用户没有对该目录的写权限,你应该使用tempfile.gettempdir()来找到他们环境的正确 /tmp 目录。请注意,这是跨平台的,因此应该可以在任何地方使用。将您创建的 h5 文件放在那里,然后记得删除它们!

于 2013-09-27T15:58:42.990 回答
1

如何使用模块“tempfile”来创建文件?

http://docs.python.org/2/library/tempfile.html

我不知道它是否可以保证在所有平台上都能正常工作,但我敢打赌它确实适用于最常见的平台。这肯定比硬编码“/tmp”作为目的地更好。

另一种方法是在内存中创建一个 HDF5 数据库,这样就不需要文件 I/O。

http://pytables.github.io/cookbook/inmemory_hdf5_files.html

我通过谷歌搜索“内存中的 hdf5”获得了该链接,所以我不能确定它的效果如何。

我认为最好的做法是编写所有测试用例以同时针对内存数据库和临时文件数据库运行。这样,即使上述技术之一对用户失败,其余测试仍将运行。您还可以单独确定错误是与文件写入相关还是与数据库内部相关。

于 2013-09-27T09:13:03.183 回答