在我的项目中,有一个包含python应用程序的子目录,我想进行单元测试。 结构如下:
my-project/
python-app/
sometool/
__init__.py
foo/
__init__.py
aaa.py
bar/
__init__.py
bbb.py
test/
sometool-tests/
foo-tests/
aaa_test.py
现在,aaa.py
包含import sometool.bar.bbb
之类的导入,它假定应用程序的基本目录为python-app
,这在我的构建设置中确实如此。
aaa_test.py
显然会导入aaa
进行测试。
但是,当从主项目目录运行nosetests ./python-app/sometool/test
时,导入失败,因为my-project
现在是导入的基本目录,即从那里找不到sometool.bar.bbb
。
如果我先cd
进入python-app
并从那里运行nosetests ./sometool/test
,一切都按预期工作。
但我想配置Visual Studio代码以使用快捷方式运行这些测试,并且这些命令似乎总是从项目根目录执行。
有没有办法将“基础目录”作为参数传递给Nose?
答案 0 :(得分:1)
您可以在nosetests环境中使用上下文提供模块:
my-project/
python-app/
...
test/
context.py
context.py:
import sys
import os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
import python-app
然后,您可以在上下文模块的导入中导入python-app
,例如在aaa_test.py
:
from tests.context import python-app
from python-app.sometool import foo, bar
这应该使nosetests总能找到python app,无论它在哪里执行。