为Nose的导入路径提供基本目录

时间:2017-01-13 09:08:12

标签: python visual-studio-code nose

在我的项目中,有一个包含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?

1 个答案:

答案 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,无论它在哪里执行。