【发布时间】:2012-05-04 10:46:23
【问题描述】:
我想使用unittest 测试一个应用程序,但我遇到了一些问题。
我的目录结构如下:
root_dir
├── src
│ ├── cmds
│ │ ├── baz.py
│ │ ├── __init__.py
│ │ └── bar.py
│ └── foo.py
└── tests
├── cmds.py
└── __init__.py
我想测试来自cmds 的baz 和bar 模块,我正在尝试这样做
root_dir> python2.7 -m unittest tests.cmds
但是在tests.cmds 中,我无法在src 目录中导入cmds 包。
我怎样才能做到这一点?
基本上我想分别使用src 和tests 目录从root_dir 测试应用程序。
我尝试将src 附加到sys.path,但是当我从tests/cmds.py 导入cmds.baz 时,我仍然从unittest 获得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'
【问题讨论】:
-
src 不是包,但测试是。这是为什么?你是否正确设置了python路径?
-
显示您的确切导入和完整的回溯。
-
@lbp 因为我在做
python2.7 -m unittest tests.cmds时必须导入。 -
也许这是一个问题,你的测试文件被称为
cmds.py,模块目录被称为cmds- 没有属性的module可能是cmds.py- 试试import src.cmds.baz和看看这是否仍然给出错误? -
解决了!我从 tests 目录(不是从 root )运行 test 命令并将 tests/cmds.py 重命名为其他内容,我仍在使用上面发布的 import 语句。
标签: python unit-testing