2016-04-25 7 views
4

У меня есть пакет python, где все мои нечеткие тестовые классы хранятся в модулях в субпакете mypkg.tests. В файле tests/__init__.py у меня есть функция, называемая suite. Обычно я запускаю эти тесты, вызывая python setup.py test, который имеет test_suite='satpy.tests.suite'. Можно ли запустить этот набор тестов из pycharm?PyCharm run select unittests

Причина, по которой у меня есть функция suite, заключается в том, что она содержит только те тесты, которые готовы к запуску из моей непрерывной интеграции, но в этом каталоге существуют другие неудачные тесты (из более старых версий пакета). Я также мог видеть, что это полезно для выбора быстрых unittests и длительных тестов. Я пробовал работать как скрипт, функционировал как nosetest или unittest. Я пробовал добавить if __name__ == "__main__": и другие типы запущенных методов командной строки без каких-либо успехов.

Есть ли способ запустить только некоторые тесты из конфигурации запуска pycharm?

+0

Лучшим обходным решением, которое я нашел, является 'from mypkg.tests.test_one import *' в начале 'tests/__ init __. Py', а затем выполняется тестирование как скрипт в конфигурации pycharm unittest. – daveydave400

ответ

0

В конфигурации «Python Unittest» Pycharm для загрузки тестов используется метод unittest.TestLoader в фоновом режиме. Теперь Pycharm фактически пытается собирать тестовые окна автоматически, но не знает, как обрабатывать экземпляры TestSuite, и даже меньше функций, возвращающих такие экземпляры.

Обходной для вашей проблемы, чтобы добавить функцию load_tests в файл tests/__init__.py, как это:

def load_tests(loader, tests, pattern): 
    return suite() 

Затем в элементе конфигурации PyCharm, выберите «Script» и дать tests/__init__.py

load_tests функция фактически сообщает тестовому загрузчику, какие тесты доступны в модуле :)

Подробнее об этом отличном трюке здесь: https://docs.python.org/2.7/library/unittest.html#load-tests-protocol

Остерегайтесь, однако, он работает только с python 2.7 и более поздними версиями.