我花了大量时间查看失败的pytest输出,以了解为什么两个对象或两个对象集合不完全匹配。
def test_flidgets_are_equal(expected_flidgets):
assert Flidgitator(44) == expected_flidget即使使用-vv选项,pytest的默认打印输出也是一团糟。对于任何类型的复杂对象(更不用说对象列表),都不能正确地对齐,很难看到不匹配的位置,甚至两个集合是否具有相同的基数。
好了,我写了一个很酷的东西来漂亮地打印对象和(排序的)对象列表之间的差异。我可以调试一个失败的测试,并像这样使用它:
$ pytest test_flidgitator.py --pdb
(test fails)
>>> from my_cool_util import diff; diff(Flidgitator(44), expected_flidgets)
[0] ✓ [Flidget] EQUAL
· capacitance 98.6
· chromaticity 19.5
· id FLIDGET_ONE
[1] ✘ [Flidget] NOT EQUAL
· capacitance 98.6
· id FLIDGET_TWO
+ chromaticity 23.8
- chromaticity 46.1
2 total / 1 equal / 1 not equal我可以使用键盘宏(TextExpander等)为了自动化import位,但我仍然必须手动键入两个对象/列表,以便在每次失败时进行比较。有没有什么方法可以避免在失败的pytest断言的两端输入和钩子,以便在失败的测试中自动调用我的实用程序?
发布于 2020-04-15 22:38:36
有一个钩子pytest_assertrepr_compare,您可以在其中定制未完整归档的assert的输出
https://stackoverflow.com/questions/61231254
复制相似问题