2012-03-13 8 views
7

He estado tratando de implementar un sistema de prueba de fuente única que permita realizar pruebas automatizadas en múltiples versiones de Python usando tox + nosetests.python - Ejecutando tox + nosetests en Python 3.2 testenv

El problema es que no puedo hacerlo funcionar cada vez que pruebo en Python 3.2. Todo funciona bien si excluyo Python 3.2.

Aquí es mi tox.ini:

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

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

[testenv:py32] 
commands = 
    nosetests [] 

y mi ~/.noserc:

[nosetests] 
verbosity=2 
with-doctest=1 

He puesto la bandera use_2to3-True en mi setup.py, pero este error sigue apareciendo: NameError: global name 'basestring' is not defined. Parece que me falta algo de configuración que debería hacer que 2to3 funcione, pero no sé qué es.

Además, he intentado reemplazar nosetests [] con en la configuración testenv:py32. Desafortunadamente, no solo sigue apareciendo el mismo error, sino que también presenta otro error: Error in atexit._run_exitfuncs: TypeError: 'NoneType' object is not callable.

¿Alguna sugerencia?

EDIT: añadido el código en setup.py, en caso de que sea útil:

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

y en algún lugar setup(): use_2to3 = use_2to3

+0

Si está utilizando 2to3, necesita asegurarse de que ejecuta 'setup.py' y las pruebas contra la versión que crea, en lugar de probar contra la fuente principal. No he usado 'tox', pero generalmente puedes ejecutar' python setup.py build', luego cambiar al directorio de compilación y ejecutar nosetest. –

+1

Creo que eso es lo que está haciendo tox. Hace virtualenvs aislados para estas versiones/implementaciones de python separadas. Por ejemplo, arroja un error si no incluyo '' from __future__ import with_statement'' en un env python2.5, pero no en python2.7. La conversión '' 2to3'' parece estar funcionando, pero por alguna razón '' tox'' no está probando en su contra automáticamente ... – bow

+0

Asegúrate de que no esté ejecutando 'nosetests' desde el directorio fuente, que tendrá el código no traducido. –

Respuesta

1

se usa algo como esto en la sección [testenv]:

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

o si tiene pruebas en un directorio aparte del paquete:

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

Esto debería evitar que nariz recoja la versión del paquete incorrecta.

Cuestiones relacionadas