すべての単体テストを別のディレクトリに入れたいと思います。私のプロジェクトのレイアウトは次のようになります。私は、私は次のエラーを取得するテストnostestを持つPython unittestインポートモジュール
$ cd project
$ nosetest
E
======================================================================
ERROR: Failure: ImportError (cannot import name 'ScraperService')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/nose/failure.py", line 39, in runTest
raise self.exc_val.with_traceback(self.tb)
File "/usr/local/lib/python3.6/site-packages/nose/loader.py", line 418, in loadTestsFromName
addr.filename, addr.module)
File "/usr/local/lib/python3.6/site-packages/nose/importer.py", line 47, in importFromPath
return self.importFromDir(dir_path, fqname)
File "/usr/local/lib/python3.6/site-packages/nose/importer.py", line 94, in importFromDir
mod = load_module(part_fqname, fh, filename, desc)
File "/usr/local/lib/python3.6/imp.py", line 234, in load_module
return load_source(name, filename, file)
File "/usr/local/lib/python3.6/imp.py", line 172, in load_source
module = _load(spec)
File "<frozen importlib._bootstrap>", line 675, in _load
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "/usr/src/project/tests/package_test.py", line 2, in <module>
from package import Service
ImportError: cannot import name 'Service'
----------------------------------------------------------------------
Ran 1 test in 0.046s
FAILED (errors=1)
私はどのようにインポートするかを実行しようとすると
from unittest import TestCase
from package import Service
class ServiceTest(TestCase):
def test_build():
service = Service.build()
self.assertIsNotNone(service)
:
project
package
__init__.py
package.py
tests
__init__.py
package_test.py
package_test.pyは次のようになりますテストクラスに私のパッケージ?
プロジェクトをモジュールにする必要はありますか?
setup.py
を配布用にパッケージ化する必要がありますか?あなたの問題を解決するために
'from package.package import Service'へのインポートを変更すると違いがありますか? – grundic
Whoa!します!しかし、なぜ? – Martinffx
最初の 'package'はフォルダから、2番目はファイルから。すべてのサブディレクトリを含む、インポートされたモジュールへのフルパスを提供する必要があります。 – grundic