Python Pytest не показывает различия утверждений - PullRequest
0 голосов
/ 21 февраля 2019

Следующий тест:

def test_something():
    assert "ddd" == "pepe"

При запуске с pytest выдает это сообщение об ошибке:

E       AssertionError: assert 'ddd' == 'pepe'
E         - ddd
E         + pepe

Однако, если мы переместим метод assert в другой файл assertion.py:

class CustomerAssertor(object):
    def __init__(self,name):
        self.name =name

    def assert_name(self,expected):
        assert self.name ==expected

И мы изменили тест на:

from sql_gen.test.utils.assertion_util import CustomerAssertor

def test_something():
    CustomerAssertor("ddd").assert_name("pepe")

Теперь я получаю следующую ошибку:

self = <assertions.CustomerAssertor object at 0x7fbcc3d31588>, expected = 'pepe'

    def assert_name(self,expected):
>       assert self.name ==expected
E       AssertionError

Это сообщение не так информативно, как ононе скажу, какова ценность имени, почему?

1 Ответ

0 голосов
/ 21 февраля 2019

Из документов :

Предоставление подробных сведений об ошибочном утверждении достигается путем переписывания операторов подтверждения перед их выполнением.Переписанные операторы assert помещают информацию самоанализа в сообщение об ошибке подтверждения.pytest переписывает только тестовые модули, непосредственно обнаруженные процессом сбора тестов, поэтому утверждает, что во вспомогательных модулях, которые сами не являются тестовыми модулями, перезаписываться не будет .

Вы можете вручную включить переписывание утверждений дляимпортированный модуль, вызвав register_assert_rewrite перед его импортом (хорошее место для этого в conftest.py).

...