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?
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.