【发布时间】:2017-01-23 11:26:01
【问题描述】:
我有一个接受一个输入(文本文件)的 Python 脚本:./myprog.py file.txt。该脚本根据给定的输入输出一个字符串。
我有一组测试文件,我想用它们来测试我的程序。我知道每个文件的预期输出,并希望确保我的脚本为每个文件生成正确的输出。
进行此类测试的普遍接受的方法是什么?
我正在考虑使用Python的unittest模块作为测试框架,然后通过subprocess.check_output(stderr=subprocess.STDOUT)运行我的脚本,捕获stdout和stderr,然后做一个unittestassertEqual来比较实际和预期的字符串。我想确保我没有错过更好的解决方案。
【问题讨论】:
-
单元测试通常在单个函数或类上完成(通常不涉及将输出写入文件或使用子进程运行东西)。除了查看 python 单元测试教程之外,我无法推荐其他任何东西,这可能会使这个问题偏离主题。
-
它在技术上不是单元测试,因为它改变了硬盘上的东西,但无论如何都可以这样做。考虑通过将功能移动到一个函数中来重构您的代码,该函数采用类似文件的对象进行输入和输出。常规代码将传入一个打开的文件句柄和
sys.stdout。但是您的单元测试代码将使用 StringIO 缓冲区。写入 stringio 而不是连接到终端的管道时存在差异,因此这并不总是最好的方法。你必须做出决定。 -
您可以随时运行
./myprog.py file.txt > result.txt,然后使用工具来比较文件 - 即。diff result.txt expected.txt- 但它不如测试有用 - 即使你把所有东西都放在 bash/batch 脚本中。