【问题标题】:Skeleton Directory: Why does script fail when nosetests returns no errors?骨架目录:为什么当鼻子测试没有返回错误时脚本会失败?
【发布时间】:2016-12-29 17:07:24
【问题描述】:

(在 Debian Linux 上使用 bash 命令行,Python 2.7.12。)

按照 Zed Shaw 的 LPTHW,我构建了一个有助于测试软件的项目框架。首先是大纲。

设置:

    bin  docs  first_project  setup.py  tests

./bin:

./docs:

./first_project:
__init__.py  wasp.py

./tests:
first_project_tests.py  __init__.py

wasp.py 的内容:

def paint(color):
    print color * 10

first_projects_tests.py 的内容:

from nose.tools import *
from first_project import wasp

def test_paint():
    wasp.paint("blue")

根据我对 Zed Shaw 解释的理解,first_project 目录中的__init__.py 告诉 Python,其中的文件可以作为模块导入。因此 test 目录中的脚本 first_project_tests.py 从 first_project 目录中导入了 wasp.py 模块,并从中调用了paint函数。

按照 Shaw 的指示,我从测试目录上方运行了 nosetests,我得到了零错误的 ok。

然后我切换到测试目录并从命令行键入 python first_project_tests.py,假设我能够毫无问题地运行脚本,因为 nosetests 命令没有给出错误。

我收到以下错误:

Traceback (most recent call last):
  File "first_project_tests.py", line 2, in <module>
    from first_project import wasp
ImportError: No module named first_project

那么为什么鼻子测试没有返回错误时 first_project_tests.py 脚本会失败?

【问题讨论】:

    标签: linux python-2.7 nose


    【解决方案1】:

    Python 导入工作相对于 模块搜索路径。当前目录自动包含在此路径中。

    当您在项目的顶层运行nosetests 时,会在相对路径中找到带有waspfirst_project 模块,因为first_project/wasp.py 相对于执行目录存在。

    当您进入tests 并尝试运行first_project_tests.py 时,导入语句将失败,因为该目录中不存在相对路径first_project/wasp.py

    您可以像这样从项目根目录运行:

    python tests/first_project_tests.py
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 2012-10-09
      相关资源
      最近更新 更多