python — Запуск tox + Nosetests на Python 3.2 testenv

Я пытался внедрить систему тестирования из одного источника, которая позволяет автоматически тестировать несколько версий Python с помощью tox + Nosetests.

Проблема в том, что я не могу заставить его работать всякий раз, когда тестирую Python 3.2. Все работает нормально, если исключить Python 3.2.

Вот мой tox.ini:

[tox]
envlist = py25,py26,py27,py32,pypy,jython

[testenv]
commands =
    nosetests []
deps =
    nose
    mock

[testenv:py32]
commands =
    nosetests []

и мой ~/.noserc:

[nosetests]
verbosity=2
with-doctest=1

Я установил флаг use_2to3 на True в файле setup.py, но эта ошибка продолжает появляться: NameError: global name 'basestring' is not defined. Кажется, мне не хватает какой-то настройки, которая должна заставить работать 2to3, но я не знаю, что это такое.

Кроме того, я попытался заменить nosetests [] на python setup.py test в настройке testenv:py32. К сожалению, не только продолжает появляться одна и та же ошибка, но и появляется другая ошибка: Error in atexit._run_exitfuncs: TypeError: 'NoneType' object is not callable.

Любые указатели?

РЕДАКТИРОВАТЬ: добавлен код в setup.py, если он полезен:

# handle python 3
if sys.version_info >= (3,):
    use_2to3 = True
else:
    use_2to3 = False

и где-то в setup(): use_2to3 = use_2to3


person bow    schedule 13.03.2012    source источник
comment
Если вы используете 2to3, вам нужно убедиться, что он запускает setup.py и тестирует версию, которая собирается, а не тестирует основной источник. Я не использовал tox, но обычно вы можете запустить python setup.py build, затем перейти в каталог сборки и запустить тесты.   -  person Thomas K    schedule 15.03.2012
comment
Я думаю, это то, что делает токсин. Он создает изолированные виртуальные среды для этих отдельных версий/реализаций Python. Например, он выдает ошибку, если я не включаю from __future__ import with_statement в env python2.5, но не в python2.7. Преобразование 2to3, кажется, работает, но по какой-то причине tox не проверяет его автоматически...   -  person bow    schedule 15.03.2012
comment
Убедитесь, что он не запускается nosetests из исходного каталога, в котором будет непереведенный код.   -  person Thomas K    schedule 15.03.2012
comment
Ах да, я думаю, что у меня это сработало. В итоге я указал каталог site-packages py32 env вручную в моем файле tox.ini. Не самое элегантное решение, учитывая, что мне не нужно делать это для других testenvs, но пока это хорошо. Спасибо!   -  person bow    schedule 16.03.2012
comment
Не за что, рад, что у тебя что-то получилось. Я не уверен, что есть элегантный способ тестирования с использованием 2to3, хотя, возможно, у distribute есть некоторые хитрости...   -  person Thomas K    schedule 16.03.2012


Ответы (1)


Вы можете использовать что-то вроде этого в разделе [testenv]:

changedir = {envtmpdir}
commands = nosetests package  # "package" is import name of the package under test

или если у вас есть тесты в отдельном каталоге, чем пакет:

changedir = tests  # directory where tests are living
commands = nosetests []

Это должно помешать носу подобрать неправильную версию пакета.

person hpk42    schedule 23.11.2012