Я курирую большое количество модульных тестов для большого проекта Python. Мы используем nose, чтобы выполнить наше обнаружение и выполнение теста. У меня есть несколько тестовых файлов, которые действительно не должны запускаться в определенных условиях. Например, возможно, у меня есть тестовый модуль, который никогда не должен запускаться в Windows (только на Mac и Linux).Как сделать «раннее возвращение» импорта под Носом?
Вот некоторые решения я использовал: методы испытаний
- Все или классы с условиями, используя нос отличных attrib plugin.
- Использование unittest.skipIf() на методы испытаний или классов
- Используйте nose's pattern exclusions пропускать файлы с
windows
во имя, например.
Моя жалоба 1 & 2 является то, что они заставляют меня импортировать модуль, который, по меньшей мере, пустая трата времени и, возможно, привести к ошибкам, если есть зависимые от импорта платформы. Мне не нравится # 3, потому что я чувствую, что он хрупкий, и не легко проявляется при чтении теста, что он будет пропущен. Все трое, похоже, чрезмерно зависят от взаимодействия между тестом и тестовым бегуном, я бы хотел что-то, что просто в тесте.
Я хотел бы сделать что-то вроде следующего в верхней части тестового модуля:
"""This module should not be run on Windows"""
import platform
if platform.system() == 'Windows':
<stop reading this module. nothing to see here>
# do the tests.
Как я могу сказать, Python или нос, чтобы остановить чтение модуля, но нет никакой ошибки? Наверное, я ищу эквивалент импорта раннего возвращения.
Вы можете сделать это, вызывая исключение, но вы должны поймать, что в коде клиента. – wim
Если ваша основная проблема: «Импорт - это пустая трата времени», то я бы не стал слишком беспокоиться об этом. Python импортирует 30-40 модулей только для запуска интерпретатора (см. Python -vv), а запущенные проекты, которые импортируют 100 или 1000, не замедлят вас. Кроме того, даже в огромном проекте количество тестового кода, специфичного для платформы, должно быть довольно маленьким. Сколько модулей мы говорим? – Seth
Определенно говорить о 1000-х годах, но некоторые из них - медленный импорт из-за плохого дизайна. Однако основная проблема заключается в том, что эти импортные сбои не работают, создавая ложные негативы в наших тестовых журналах. – dbn