作为使用unittest
框架的一些Python测试的一部分,我需要比较两个相对较短的文本文件,其中一个是测试输出文件,另一个是引用文件。
直接的方法是:
import filecmp
...
self.assertTrue(filecmp.cmp(tst_path, ref_path, shallow=False))
字符串
如果测试通过,它可以正常工作,但是在失败的情况下,输出中没有太大的帮助:
Assert错误:假的不是真的
作为unittest
框架的一部分,是否有更好的方法来比较两个文件,以便在不匹配的情况下生成一些有用的输出?
5条答案
按热度按时间p5fdfcr11#
要获得哪一行有差异的报告以及该行的打印输出,请对内容使用
assertListEqual
,例如字符串
vwoqyblh2#
您需要做的就是为错误条件添加自己的消息。多克
第一个月
8ehkhllq3#
以数组的形式比较文件会产生有意义的Assert错误:
字符串
你可以在每次需要比较文件时使用它,或者把它放在一个函数中。你也可以把文件的形式文本字符串而不是数组。
w3nuxt5m4#
比较一下这两个文件的内容不是更好吗?例如,如果它们是文本文件,比较两个文件的文本,这将输出一些更有意义的错误消息。
ac1kyiln5#
您可以使用内置的difflib模块来完成此操作。
使用
unified_diff
,该格式为纯文本,如果文件内容匹配,则为空。首先需要将文件内容读入列表中,unified_diff
的返回是一个生成器,所以我们将其 Package 在list
中,以便我们可以检查它。这里有一个你可以使用的模板:字符串
我在这里唯一的抱怨是我希望我有颜色。如果你真的很想要它们,你可以根据来自同一个模块的
get_grouped_opcodes
的输出实现你自己的diff格式。