4

使用してテストしたいアプリケーションがありますが、unittestいくつか問題があります。私のディレクトリ構造は次のとおりです。

root_dir
├── src
│   ├── cmds
│   │   ├── baz.py
│   │   ├── __init__.py
│   │   └── bar.py
│   └── foo.py
└── tests
    ├── cmds.py
    └── __init__.py

bazbarモジュールをテストしたいのですが、cmdsやろうとしています

root_dir> python2.7 -m unittest tests.cmds

しかし、自分のディレクトリにパッケージをtests.cmdsインポートできません。cmdssrc

どうすればこれを機能させることができますか?

root_dir基本的に、srctestsディレクトリを別々に使用してアプリケーションをテストしたいと考えています。

に追加しようとsrcしましsys.pathたが、からインポートcmds.bazするtests/cmds.pyと、まだユニットテストから取得AttributeError: 'module' object has no attribute 'cmds'されます。

編集:私のインポートとsys.pathステートメントは次のとおりです。

import sys
sys.path.append('../src')
from cmds.baz import about

そしてトレースバック:

Traceback (most recent call last):
  File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/usr/lib/python2.7/unittest/__main__.py", line 12, in <module>
    main(module=None)
  File "/usr/lib/python2.7/unittest/main.py", line 94, in __init__
    self.parseArgs(argv)
  File "/usr/lib/python2.7/unittest/main.py", line 149, in parseArgs
    self.createTests()
  File "/usr/lib/python2.7/unittest/main.py", line 158, in createTests
    self.module)
  File "/usr/lib/python2.7/unittest/loader.py", line 128, in loadTestsFromNames
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "/usr/lib/python2.7/unittest/loader.py", line 100, in loadTestsFromName
    parent, obj = obj, getattr(obj, part)
AttributeError: 'module' object has no attribute 'cmds'
4

2 に答える 2

5

非常に間違っているのは、に相対パスを追加することsys.pathです。パスについて確認したい場合は、次のようにします。

# assuming that the code is in test's __init__.py
import os
import sys
sys.path.insert(0, os.path.abspath( os.path.join(os.path.dirname(__file__), 
                                               '../src/') ))
# now you can be sure that the project_root_dir/src comes first in sys.path
于 2012-04-24T12:15:10.047 に答える
2

私はあなたがそれをほぼ正しく理解したと思います。しかし、ルートディレクトリからテストを実行すると、パス('../src')が間違っていると思います。多分あなたはこのようなことをすることができます:

import os
import sys

ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')
sys.path.append(os.path.join(ROOT, 'src'))

from cmds.baz import about
于 2012-04-24T12:15:03.820 に答える