在模拟、pytest(或一般情况下?)中表示调用差异的更好方法



我遇到了使用 python (2.7( 中的mock库的问题,我看到这样的错误:

def raise_from(value, from_value):
>       raise value
E       AssertionError: Expected call: run_sync(country_code='GB', email_data={'username': 'username-1n@n3m((', 'hotelier_name': 'Alexander QW*!@H#(!*@#', 'id': 'hotel-id-8nabqtQW', 'hotelier_email': 'alexander@rnwmenrqnweq#!@#.com', 'name': 'hotel-name-8nabqtQW'}, i18n_labels=<MagicMock name='elami_labels' id='140095030265936'>, mail_service=<MagicMock name='mock.mail_service.users().messages()' id='140095028784272'>, partner_id='partner-facebooking-@j344', partner_name='partner-name-ANQWWEnn', product=<Product object at 0x7f6a6ad1da50>, username='username-1n@n3m((')
E       Actual call: run_sync(country_code='GB', email_data={'username': 'username-1n@n3m((', 'hotelier_name': 'Alexander QW*!@H#(!*@#', 'id': 'hotel-id-8nabqtQW', 'hotelier_email': 'alexander@rnwmenrqnweq#!@#.com', 'name': 'hotel-name-8nabqtQW'}, i18n_labels=<MagicMock name='elami_labels' id='140095030265936'>, mailing_service=<MagicMock name='mock.mail_service.users().messages()' id='140095028784272'>, partner_id='partner-facebooking-@j344', partner_name='partner-name-ANQWWEnn', product=<Product object at 0x7f6a6ad1da50>, username='username-1n@n3m((')

由于滚动,这看起来不错,但在控制台中看起来更糟。喜欢这个:

E AssertionError: Expected call: run_sync(country_code='GB', email_data={'username': 'username-1n@n3m((', 'hotelier_name': 'Alexander QW*!@H#(!*@#', 'id': 'hotel-id-8nabqtQW', 'hotelier_email': 'alexander@rnwmenrqnweq#!@#.com', 'name'

: 'hotel-name-8nabqtQW'}, i18n_labels=, mail_service=, partner_id='partner-facebooking-@j344', partner_name='partner-name-ANQWWEnn', product=, username='username-1n@n3m('(

E 实际调用: run_sync(country_code='GB', email_data={'用户名': 'username-1n@n3m((', 'hotelier_name': 'Alexander QW*!@H#(!*@#', 'id': 'hotel-id-8nabqtQW', 'hotelier_email': 'alexander@rnwmenrqnweq#!@#.com', 'name': 'hotel-name-8nabqtQW'}, i18n_labels=, mailing_service=, partner_id='partner-facebooking-@j344', partner_name='partner-name-ANQWWEnn', product=, username='username-1n@n3m('(

即便如此,由于 2 条线没有对齐,因此很难发现差异。

有什么工具可以解决这个问题吗?我不擅长pytest扩展,但可能如果没有,我应该写一个 - 如果可能的话。我相信很多人一直都有这个问题。

或者也许有某种方法,独立于py.test来显示这种差异......一种快速解析调用并将其显示为我们的错误的方法。

试一试糖:

一个用于 py.test 的插件,用于更改 py.test 的默认外观 (例如进度条,显示立即失败的测试(

似乎在从pytest获得更漂亮的输出方面向前迈出了一步。

最新更新