web-dev-qa-db-fra.com

Python structure du package, setup.py pour exécuter des tests unitaires

Je ne suis pas sûr d'organiser correctement la structure de mon package ou j'utilise les bonnes options dans setup.py car je reçois des erreurs lorsque j'essaie d'exécuter des tests unitaires.

J'ai une structure comme celle-ci:

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

Mon setup.py ressemble à ceci:

#!/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",                          
)

Lorsque j'exécute le "test python setup.py", j'obtiens:

nate@nate-desktop:~/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'

Les noms de test doivent-ils correspondre aux noms de module? Y a-t-il d'autres conventions que je dois suivre dans ma structure de package?

57
Nate Reed

Grâce à quelques essais et erreurs, j'ai trouvé la cause de ce problème. Les noms de test doivent correspondre aux noms de module. S'il y a un test "foo_test.py", il doit y avoir un module correspondant foo.py.

J'ai trouvé quelques directives sur l'organisation de la structure du package , ce qui m'a aidé à réorganiser mon package en une structure en laquelle j'avais confiance.

47
Nate Reed