Я провожу большую часть своего дня, щурясь на неудачный вывод 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, et c.) Для автоматизации бита import
, но мне все равно придется вручную введите два объекта / списки, которые я хочу сравнить при каждом сбое. Есть ли какой-нибудь способ, которым я могу избежать ввода и зацепить две стороны неудавшегося утверждения pytest
, чтобы автоматически вызывать мою утилиту при неудачном тесте?