【问题标题】:Provide base directory for import paths to Nose为鼻子的导入路径提供基本目录
【发布时间】:2017-01-13 17:53:57
【问题描述】:

在我的项目中,有一个包含我想要进行单元测试的 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 Code 以使用快捷方式运行这些测试,而这些命令似乎总是从项目根目录执行。

有没有办法将“基本目录”作为参数传递给 Nose?

【问题讨论】:

    标签: python visual-studio-code nose


    【解决方案1】:

    您可以在鼻子测试环境中使用上下文提供模块:

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

    【讨论】:

    • 谢谢,这行得通!为了不必在所有测试文件中导入context,我最终将路径操作代码放入__init__.py(而不是context.py)。此外,这样导入python-app 似乎没有必要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2017-10-10
    相关资源
    最近更新 更多