2011-05-28 25 views
57

No estoy seguro de que estoy organizando correctamente la estructura de mi paquete o estoy usando las opciones correctas en setup.py porque recibo errores cuando intento ejecutar pruebas unitarias .Estructura del paquete de Python, setup.py para ejecutar pruebas de unidad

que tienen una estructura como esta:

/project 
    /bin 
    /src 
     /pkgname   
      __init__.py 
      module1.py 
      module2.py 
    /tests 
     __init__.py 
     test1.py 
     test2.py 

Mi setup.py se ve así:

#!/usr/bin/env python                                   
from setuptools import setup, find_packages 

setup(version='0.1', 
     description='Trend following library', 
     author='Nate Reed', 
     author_email='[email protected]', 
     packages=find_packages(), 
     install_requires=['numpy'], 
     test_suite="tests",       
) 

Cuando corro 'prueba setup.py pitón' me sale:

[email protected]:~/PycharmProjects/trendfollowing$ sudo python setup.py test 
running test 
running egg_info 
writing requirements to UNKNOWN.egg-info/requires.txt 
writing UNKNOWN.egg-info/PKG-INFO 
writing top-level names to UNKNOWN.egg-info/top_level.txt 
writing dependency_links to UNKNOWN.egg-info/dependency_links.txt 
reading manifest file 'UNKNOWN.egg-info/SOURCES.txt' 
writing manifest file 'UNKNOWN.egg-info/SOURCES.txt' 
running build_ext 
Traceback (most recent call last): 
    File "setup.py", line 11, in <module> 
    test_suite="tests", 
    File "/usr/lib/python2.6/distutils/core.py", line 152, in setup 
    dist.run_commands() 
    File "/usr/lib/python2.6/distutils/dist.py", line 975, in run_commands 
    self.run_command(cmd) 
    File "/usr/lib/python2.6/distutils/dist.py", line 995, in run_command 
    cmd_obj.run() 
    File "/usr/lib/python2.6/dist-packages/setuptools/command/test.py", line 137, in run 
    self.with_project_on_sys_path(self.run_tests) 
    File "/usr/lib/python2.6/dist-packages/setuptools/command/test.py", line 117, in with_project_on_sys_path 
    func() 
    File "/usr/lib/python2.6/dist-packages/setuptools/command/test.py", line 146, in run_tests 
    testLoader = loader_class() 
    File "/usr/lib/python2.6/unittest.py", line 816, in __init__ 
    self.parseArgs(argv) 
    File "/usr/lib/python2.6/unittest.py", line 843, in parseArgs 
    self.createTests() 
    File "/usr/lib/python2.6/unittest.py", line 849, in createTests 
    self.module) 
    File "/usr/lib/python2.6/unittest.py", line 613, in loadTestsFromNames 
    suites = [self.loadTestsFromName(name, module) for name in names] 
    File "/usr/lib/python2.6/unittest.py", line 587, in loadTestsFromName 
    return self.loadTestsFromModule(obj) 
    File "/usr/lib/python2.6/dist-packages/setuptools/command/test.py", line 34, in loadTestsFromModule 
    tests.append(self.loadTestsFromName(submodule)) 
    File "/usr/lib/python2.6/unittest.py", line 584, in loadTestsFromName 
    parent, obj = obj, getattr(obj, part) 
AttributeError: 'module' object has no attribute 'test1' 

¿Los nombres de las pruebas deben coincidir con los nombres de los módulos? ¿Hay otras convenciones que debo seguir en la estructura de mi paquete?

Respuesta

47

A través de un ensayo y error, encontré la causa de este problema. Los nombres de prueba deben coincidir con los nombres de los módulos. Si hay una prueba "foo_test.py", debe haber un módulo correspondiente foo.py.

Encontré algunos guidelines on organizing package structure, que me ayudaron a reorganizar mi paquete en una estructura en la que confiaba.

Cuestiones relacionadas