首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python导入使用nose进行测试-导入当前包以上的模块的最佳实践是什么

Python导入使用nose进行测试-导入当前包以上的模块的最佳实践是什么
EN

Stack Overflow用户
提问于 2011-07-13 03:57:40
回答 3查看 21.7K关注 0票数 65

这是一个经常以不同形式被问到的问题,通常得到的回答是“哈哈,你做得不对”。我很确定这是因为人们(包括我)都在尝试使用一个常识场景作为实现,而解决方案并不明显(如果你以前没有这样做过)。

会接受一个“让苍蝇飞出瓶子”的回答。

给定的

代码语言:javascript
复制
project/
    __init__.py
    /code
        __init__.py
        sut.py
    /tests
        __init__.py
        test_sut.py

tests_sut.py开始的位置:

代码语言:javascript
复制
import code.sut

在根目录中运行nosetests会导致:

代码语言:javascript
复制
ImportError: No module named code.sut

走过的道路:

a)使用

代码语言:javascript
复制
from ..code import sut

b)将项目的根添加到PYTHONPATH

c)使用

代码语言:javascript
复制
sys.path.append

要添加..每个测试模块开始处的导入之前的路径。

d)只需记住做一个

代码语言:javascript
复制
setup.py 

在运行测试之前,在项目上将模块安装到站点包中。

因此,要求测试位于测试包根目录下,这些测试可以访问项目。以上每一项对我来说都不是“自然”的,都被证明是有问题的,或者看起来像是太难的工作!

在java中,这是可行的,但基本上是借助于构建工具/ IDE将所有类放在类路径中。也许问题是我期待的是Python的“魔力”?在Flask webframework测试中指出,选项d)似乎是首选的。

在任何情况下,下面推荐一个首选解决方案的声明将消除我自己的“不自然”的感觉。

EN

Stack Overflow用户

发布于 2012-05-18 12:46:57

我也遇到了同样的问题,并在相关问题中找到了一个适合我的answer

只需删除项目根目录中的__init__.py即可。

票数 45
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6670275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档