Существует разница в выводе утверждения Pytest в PyCharm в зависимости от того, находится ли функция с утверждением в том же файле или в другом файле.
Давайте рассмотрим пример.
tmp.py:
from utils.tmp_1 import assert_in_another_file
def test_assert():
d1 = {
1: 2,
3: 4
}
d2 = {
3: 4,
5: 6
}
assert_in_the_same_file(d1, d2)
# assert_in_another_file(d1, d2)
def assert_in_the_same_file(d1, d2):
assert d1 == d2
tmp_1.py:
def assert_in_another_file(d1, d2):
assert d1 == d2
Если я запускаю Assert_in_the_same_file:
def test_assert():
d1 = {
1: 2,
3: 4
}
d2 = {
3: 4,
5: 6
}
assert_in_the_same_file(d1, d2)
Выход:
Expected :{3: 4, 5: 6}
Actual :{1: 2, 3: 4}
<Click to see difference>
Если я запускаю Assert_in_another_file:
def test_assert():
d1 = {
1: 2,
3: 4
}
d2 = {
3: 4,
5: 6
}
assert_in_another_file(d1, d2)
Выход:
> assert d1 == d2
E AssertionError
Нет Нажмите, чтобы увидеть разницу, Нет фактического, ожидаемого
Это проблема Pytest или Pycharm? Как это исправить и всегда получать сообщение «Нажмите, чтобы увидеть разницу»?
Я проверил PyCharm 2023.3.5 (Community Edition), сборка № PC-233.15026.15, построенная 21 марта 2024 г. Проблема решена. Вы используете ту же версию?





Я могу воспроизвести это, если использую это tmp_1.py имя.
Если вы переименуете файл в доступный для обнаружения по имени pytest, например test_tmp_1.py, вы увидите нормальное утверждение.
Это связано с тем, что хороший вывод утверждений достигается благодаря самоанализу утверждений pytest.
Подробнее вы можете прочитать в https://pybites.blogspot.com/2011/07/behind-scenes-of-pytests-new-assertion.html
Если вы не хотите переименовывать файл, чтобы его можно было обнаружить с помощью pytest, вы можете добавить Register_assert_rewrite
pytest.register_assert_rewrite("tmp_1")
И посмотрите на него хорошие утверждения в стиле pytest.
Это проблема PyCharm, но я не могу воспроизвести ее в текущей версии PyCharm.