Python 我可以钩住pytest断言失败吗?
我花了一天的大部分时间眯着眼于失败的Python 我可以钩住pytest断言失败吗?,python,python-3.x,pytest,Python,Python 3.x,Pytest,我花了一天的大部分时间眯着眼于失败的pytest输出,看看为什么两个对象或两个对象集合不太匹配 def test_flidgets_are_equal(expected_flidgets): assert Flidgitator(44) == expected_flidget pytest的默认打印输出,即使使用了-vv选项,也是一团乱麻。任何东西都不能正确对齐,也不能与任何类型的复杂对象(更不用说对象列表)对齐。很难看到不匹配的位置,甚至很难看到两个集合是否具有相同的基数 好的,我写了
pytest
输出,看看为什么两个对象或两个对象集合不太匹配
def test_flidgets_are_equal(expected_flidgets):
assert Flidgitator(44) == expected_flidget
pytest
的默认打印输出,即使使用了-vv
选项,也是一团乱麻。任何东西都不能正确对齐,也不能与任何类型的复杂对象(更不用说对象列表)对齐。很难看到不匹配的位置,甚至很难看到两个集合是否具有相同的基数
好的,我写了一个很酷的东西来打印对象和(排序的)对象列表之间的差异。我可以调试失败的测试并使用它,如下所示:
$ 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等)自动执行
导入
位,但我仍然必须手动键入每次失败时要比较的两个对象/列表。有什么方法可以避免在失败的pytest
断言的两侧键入并钩住,以便在失败的测试中自动调用我的实用程序吗?有一个钩子,您可以自定义unfullfield断言的输出!这就是我要找的。上面的链接已经死了,但文档已经死了。