python - 用Python编写单元测试文件

标签 python unit-testing file-io

我正在用 Python 为 ConfigParser 编写一个包装器,以提供一个简单的接口(interface)来存储和检索应用程序设置。

包装器有两个方法,readwrite,以及一组用于不同应用程序设置的属性。

write 方法只是 ConfigParserwrite 方法的包装器,另外还创建了配置解析器。它看起来像这样:

def write(self):
    f = open(self.path, "w")
    try:
        self.config_parser.write(f)
    finally:
        f.close()

我想编写一个单元测试,断言如果无法写入文件并且在其他情况下调用了配置解析器的 write 方法,则此方法会引发 IOError。

第二个测试使用模拟对象很容易处理。但是 open 调用让事情变得有点棘手。最终我必须创建一个文件对象以传递给配置解析器。运行这段代码时实际上会创建一个文件这一事实并不能使它对单元测试非常有用。是否有一些模拟文件创建的策略?可以通过某种方式测试这段代码吗?还是它太简单而无法测试?

最佳答案

首先,您实际上不需要对 open() 进行单元测试,因为假设标准库是正确的是非常合理的。

接下来,您不想执行文件系统操作来让 open() 生成您想要的错误,因为这样您就不是在进行单元测试,而是在执行功能/通过包含文件系统进行集成测试。

因此,您或许可以将全局命名空间中的 open() 替换为仅引发 IOError 的代理项。不过,如果继续执行,可能需要确保将东西放回去。

但说到底,测试有什么值(value)呢?该代码片段中几乎没有属于您自己的系统。甚至替换 open() 实际上最终只是一个测试,它说“Python 中的 tryfinally 语句是否有效?”

我的建议?只需在记录您的期望的文档字符串中添加一条语句即可。 “如果无法写入文件,则引发 IOError。”然后继续前进。如果此方法变得有些复杂(和测试值(value)),您可以稍后添加单元测试。

关于python - 用Python编写单元测试文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2047459/

相关文章:

c - 使用结构体数组成员二进制保存结构体 (C)?

Java - 使用 IO 流打开现有文件或创建一个(如果不存在)

python - CNN - 混淆矩阵错误显示

python - 问题转换较旧的 MITMProxy 脚本以在 5.2 上工作 - 替换时出错并且无法找到有关替换内容的文档

python - 如何在 App Engine 上对 protorpc 调用进行单元测试

VS 2010 中的 Silverlight 单元测试集成?

unit-testing - Qunit 测试位于包含多个 Controller 的文件中的 ember Controller ?

java - 什么时候应该优先选择 Callable 而不是 Runnable?为什么?

python - 如何使用 GDB 在 C 级别调试 python 脚本。给我一个简单的例子

python - 访客模式,为什么有用?