骨架目录:当鼻子测试没有返回错误时,为什么脚本会失败?

时间:2016-12-29 17:07:24

标签: linux python-2.7 nose

(在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其中的文件可以作为模块导入。因此,测试目录中的脚本first_project_tests.py从first_project目录导入wasp.py模块并从中调用paint函数。

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

然后我转换到tests目录并从命令行输入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

那么,当nosetests没有返回任何错误时,为什么first_project_tests.py脚本会失败?

1 个答案:

答案 0 :(得分:1)

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

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

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

您可以从项目根目录运行:

python tests/first_project_tests.py