Вопрос №55410 от пользователя Sergio в уроке «Плохие и хорошие практики тестирования», курс «Python: Автоматическое тестирование»
Не понятен пример с тестом вне тестов. Во-первых сам пример выдает ошибку при тестировании. Во-вторых не понятно, а какой код в этом случае был бы правильным. Такой?
@pytest.fixture
def result():
# Вызывается тестируемый код
a = 5
b = 9
return a, b
def test_sum(result):
assert sum(result) == 14
Sergio, приветствую!
Во-первых сам пример выдает ошибку при тестировании.
В примере была опечатка, я её поправил. Функция sum() должна принимать на вход список чисел сумму которых нужно подсчитать sum([5, 9])
.
Во-вторых не понятно, а какой код в этом случае был бы правильным. Такой?
Нет не такой. Данный пример демонстрирует неправильный подход в тестировании. Основная идея данного теста - проверить работу функции sum(), а задача фикстур - готовить данные нужные для тестов, или настраивать среду тестирования. В данном примере фикстура используется не по назначению, а именно в ней выполняется вызов тестируемой функции, то есть по факту она содержит часть тестов. Вызов тестируемых функций должен происходить непосредственнл в функциях с тестами, именно для этого они предназначены.
Приветствую, Станислав!
Хочется доразобраться. Задача фикструр - готовить данные. То есть result()
должен вернуть данные для тестовой функции. В моем примере result()
возвращает 2 значения. Дальше эти данные подставляются в тестируемую функцию и полученный ответ сверяется с правильным значением.
В чем ошибка в моем примере? Данные в виде значений лучше передавать через @pytest.mark.parametrize
?
Сергей, приветствую!
В моем примере result() возвращает 2 значения. Дальше эти данные подставляются в тестируемую функцию и полученный ответ сверяется с правильным значением. В чем ошибка в моем примере?
Уточню свой предыдущий ответ, так как я не обратил внимание, что у вас в функции result готовятся именно данные. Да, так будет вполне корректно поступить - подготовить в result именно входящие данные и прогнать их через тестируемую функцию. Правда в конкретном примере это выглядит несколько переусложненным, потому как гораздо проще и легче передать нужные данные напрямую в тестируемую функцию, но в целом подход верный.
Используйте Хекслет по максимуму!
- Задавайте вопросы по уроку
- Проверяйте знания в квизах
- Проходите практику прямо в браузере
- Отслеживайте свой прогресс
Зарегистрируйтесь или войдите в свой аккаунт
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.







