2013-09-14 2 views
7

Я использовал, чтобы иметь это в моем setup.cfg файле:Создание `nosetests` сценария выберите папку версии Python

[nosetests] 
where=test_python_toolbox 

Но теперь я поддерживаю Python 2 и Python 3 путем подачи двух параллельных баз кода, один в папку source_py2 и одну в папке source_py3. setup.py знает, как проверить версию Python и выбрать правильный. Проблема в том, что я не знаю, как сделать nosetests, при вызове в корне репо выберите правильную папку.

Я мог бы это:

[nosetests] 
where=source_py2/test_python_toolbox 

Но тесты будут работать только на Python 2. Я хочу, чтобы они работали для обеих версий.

Я могу запустить nosetests с флагом, но я бы предпочел не.

ответ

6
[nosetests] 
where=source_py2/test_python_toolbox 
py3where=source_py3/test_python_toolbox 
1

tox может сделать это через несколько спецификаций среды и параметр changedir (просто переопределить это на версию Python).

+0

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

+0

Затем вам нужно написать плагин для носа, основанный на «- где». – jhermann

+0

Хорошо, это вариант. Но должен ли кто-нибудь, кто хочет запустить мой тест, установить мой плагин? Или он может быть включен в репо и автоматически использован, когда пользователь запускает «nosetests» без аргументов в корне репо? (Предполагая, что у пользователя не установлен мой плагин.) –

3

Вместо того, чтобы использовать where который устаревшее, используйте tests и указать несколько тестов:

[nosetests] 
tests=source_py2/test_python_toolbox, source_py3/test_python_toolbox 

Это будет работать как набор тестов. Для каждого теста, на самом верху, до того, как будут установлены специальные функции языка, добавьте критерии выбора для запуска тестов. Например, для source_py3 тестов добавить:

import sys 
from unittest import SkipTest 

if sys.version_info < (3, 0): 
    raise SkipTest("must use python 3.0 or greater") 

С python2.6 носа вы получите:

S 
---------------------------------------------------------------------- 
Ran 1 test in 0.001s 

OK (SKIP=1) 

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

+0

Разве это не заставит Вин попытаться запустить тесты в обеих папках, тем самым получая множество исключений при попытке запустить тесты для Python 2 на Python 3? –

+0

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

+0

Или добавьте декоратор skipIf и определите его на что-то, например: '@ unittest.skipIf (mylib .__ version__ <(1, 3), " не поддерживается в этой версии библиотеки ")' – Oleksiy

Смежные вопросы