Есть ли способ модульного тестирования pythonic, чтобы подтвердить, что функция была успешно импортирована?

Допустим, у нас есть следующая простая файловая структура:

- some_file.py
- tests.py

Файл some_file.py должен содержать функцию foo, но как я могу подтвердить это с помощью фреймворка unittest?

Я мог видеть, как сделать что-то подобное в tests.py:

try:
   from some_file import foo
except ImportError as error:
   print('Error! Could not find foo.)

... но мне любопытно, есть ли способ сделать это с помощью утверждений вместо блока try-except.

Этот вопрос довольно подробно описывает тестирование импорта самих модулей, но на самом деле я ничего не вижу о функциях в файле, если только я что-то не упускаю из виду.

@Asa try-except является pythonic.

eyllanesc 08.05.2022 20:31
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете использовать несколько подходов:

  • Просто импортируйте функцию без try-except. Если он не вызывает исключение, он считается пройденным тестом. Однако, если это так, это считается ошибка, а не отказ.
  • Измените импорт с from some_file import foo на import some_file и добавьте утверждение assertTrue(hasattr(some_file, 'foo')). Преимущество этого заключается в том, что теперь вы явно проверяете, существует ли что-то с именем foo в some_file, а не то, что вы можете импортировать some_file.

Фантастика, второй пункт списка был именно тем, что я искал в моем случае использования. Благодарю вас!

Asa 08.05.2022 20:37

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