28 Mayıs 2011, CUMARTESİ
Python paket yapısı, setup.py çalışan birim testleri için
Doğru paketi benim yapı organizasyon veya birim testleri çalıştırmak istediğimde hata alıyorum çünkü setup.py doğru seçenek kullanıyorum, emin değilim.
Böyle bir yapısı var:
/project
/bin
/src
/pkgname
__init__.py
module1.py
module2.py
/tests
__init__.py
test1.py
test2.py
Benim setup.py bu gibi görünüyor:
#!/usr/bin/env python
from setuptools import setup, find_packages
setup(version='0.1',
description='Trend following library',
author='Nate Reed',
author_email='nate@natereed.com',
packages=find_packages(),
install_requires=['numpy'],
test_suite="tests",
)
'Python setup.py test'.. çalıştırdığımda
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'
Test adları modül adları gerekiyor mu? Paket yapısında benim takip etmem gereken başka kuralları var mı?
CEVAP
28 Mayıs 2011, CUMARTESİ
Biraz deneme yanılma yoluyla, bu sorunun nedenini buldum. Test adları modül adları aynı olmalıdır. "Foo_test.py" ilgili bir modül olmalı test foo.py. bir ise
Benim emin olduğum bir yapı içine paketimi yeniden düzenlemek yardımcı olan organize paket yapısı hakkında bazı ipuçları buldum:
https://web.archive.org/web/20100522073026/http://guide.python-distribute.org/
Bunu Paylaş:
Nasıl python ile dinamik () parametriz...
nasıl bir dizindeki tüm Python birim t...
Python bir uygulama için en iyi proje ...
Makul bir kod kapsama birim testleri (...
Nerede Python birim testleri gider?...