Могу ли я подключиться к ошибкам утверждения Pytest? - PullRequest
1 голос
/ 15 апреля 2020

Я провожу большую часть своего дня, щурясь на неудачный вывод 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, чтобы автоматически вызывать мою утилиту при неудачном тесте?

1 Ответ

0 голосов
/ 15 апреля 2020

есть хук pytest_assertrepr_compare , где вы можете настроить вывод невыполненного assert

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...