有没有测试文件部分写入失败的好方法?

Phi*_*ing 5 python unit-testing

有没有测试文件部分写入失败的好方法?我对模拟完整磁盘特别感兴趣。

我有一些修改文件的代码。对于某些故障,代码无能为力,例如:如果在写入时拔下磁盘。但是对于其他可预测的故障,例如磁盘已满,我的代码应该(并且可以)捕获异常并撤消自最近修改开始以来的所有更改。

认为我的代码在这方面做得很好,但我正在努力寻找一种方法来对其进行详尽的单元测试。编写单元测试来限制真实的文件系统1是很困难的。我看不到任何限制BytesIO 的方法。我不知道有任何模拟包。

在我自己编写之前,是否有任何标准工具/技术?


1由于一些原因,限制真实的文件系统是很困难的。最大的困难是文件系统通常受限于几个 KiB 而不是字节的块。很难让这个测试所有不愉快的路径。也就是说,一个好的测试会以不同长度的限制重复,以确保file.write(...)测试中的每个单独错误,但是使用 4KiB 的块大小来实现这一点将是困难的。

MrB*_*men 4

免责声明:我是 pyfakefs 的贡献者。

这对您来说可能有点过头了,但您可以使用pyfakefs模拟整个文件系统。这允许您预先设置文件系统大小。这是一个使用 pytest 的简单示例:

def test_disk_full(fs):  # fs is the file system fixture
    fs.set_disk_usage(100)  # sets the file system size in bytes
    os.makedirs('/foo')
    with open('/foo/bar.txt', 'w') as f:
        with pytest.raises(OSError):
            f.write('a' * 200)
            f.flush()
Run Code Online (Sandbox Code Playgroud)