Учитывая параметризованный тест, как я могу напечатать сообщение только один раз для всех параметров? - PullRequest
0 голосов
/ 31 мая 2018

Предположим, этот пример кода:

@pytest.mark.parametrize('foo', ['foo1', 'foo2', 'foo3'])
def test_foo(foo):
    print('Testing foo')
    data = ['bar1', 'foo1', 'bar2']
    assert foo in data, 'Error: {} is not in data'.format(foo)

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

Testing foo
Testing foo
Error: foo2 is not in data
Testing foo
Error: foo3 is not in data

Можно ли отобразить тестовое сообщение только один раз для всех параметров, чтобычто вывод:

Testing foo
Error: foo2 is not in data
Error: foo3 is not in data

Мой реальный код использует примерно 10 параметров, поэтому повторение сообщения 10 раз становится довольно раздражающим и добавляет много шума на вывод.

1 Ответ

0 голосов
/ 31 мая 2018

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

Вывод правильный, потому что он похож на:

====== test_foo(foo2) ======
Testing foo
Error: foo2 is not in data

====== test_foo(foo3) ======
Testing foo
Error: foo3 is not in data

В любом случае, чтобы ответить на мой вопрос, оба подхода @hoefling и @BallpointBen работают.Лично я предпочитаю способ @ BallpointBen, потому что вам не нужно сопоставлять if с параметром, который в какой-то момент вы можете удалить.

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