Pytest и PyCharm: как всегда получать <Нажмите, чтобы увидеть разницу>?

Существует разница в выводе утверждения 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, но я не могу воспроизвести ее в текущей версии PyCharm.

MrBean Bremen 15.04.2024 20:34

Я проверил PyCharm 2023.3.5 (Community Edition), сборка № PC-233.15026.15, построенная 21 марта 2024 г. Проблема решена. Вы используете ту же версию?

Diggy 16.04.2024 11:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я могу воспроизвести это, если использую это 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.

Другие вопросы по теме

Как получить доступ к приспособлению внутри функции, не связанной с приспособлением, в pytest
Использование «@pytest.hookimpl(tryfirst=True)» приводит к следующему AttributeError: «У объекта-генератора нет пропущенного атрибута»
Как я могу использовать pytest, чтобы узнать, существует ли атрибут атрибута класса в Python?
Используйте caplog в приспособлении автоматического использования в pytest
Как переопределить FastApi app.dependent_overrides с помощью функции/прибора, имеющего аргумент?
RuntimeError: цикл событий закрывается, когда я вызываю db.comit()
Как имитировать функцию Python, чтобы она не вызывалась во время импорта?
FastAPI переопределяет зависимости и безопасность
PermissionError: [WinError 32] Процесс не может получить доступ к файлу, поскольку он используется другим процессом: './instance/test_db.sqlite'
Как установить переменные среды в приспособлении pytest с помощью контекстного менеджера MonkeyPatch?