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

Provide base directory for import paths to 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 来测试它。 但是,当从主项目目录 运行ning nosetests ./python-app/sometool/test 时,导入失败,因为 my-project 现在是导入的基本目录,即从那里找不到 sometool.bar.bbb

如果我先 cd 进入 python-app 并从那里进入 运行 nosetests ./sometool/test,一切都会按预期进行。 但是我想使用快捷方式将 Visual Studio 代码配置为 运行 这些测试,并且这些命令似乎总是从项目根目录执行。

有没有办法将 "base directory" 作为参数传递给 Nose?

您可以在 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 应用程序,无论它在哪里执行。