首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中使用unittest的相对导入

Python中使用unittest的相对导入
EN

Stack Overflow用户
提问于 2014-02-01 05:59:25
回答 3查看 20.1K关注 0票数 39

我正在尝试使用Python单元测试和相对导入,但我似乎无法理解它。我知道有很多相关的问题,但到目前为止,这些问题都没有帮助。如果这是重复的,我很抱歉,但我真的很感激任何帮助。我试图使用PEP328 http://www.python.org/dev/peps/pep-0328/中的语法,但我一定是弄错了。

我的目录结构是:

project/
    __init__.py
    main_program.py
    lib/
        __init__.py
        lib_a
        lib_b
    tests/
        __init__.py
        test_a
        test_b

我使用以下命令运行测试:

python -m unittest test_module1 test_module2

test_a需要同时导入lib/lib_a和main_program。这是我尝试用于导入的来自test_a的代码:

from ..lib import lib_a as lib
from ...project import main_program

两者都会引发此错误:

ValueError: Attempted relative import in non-package

我所有的初始化.py文件当前都是空的。

任何具体的建议都将不胜感激!

编辑:

这可能是答案:Python Packages?我还在验证这是否可行。

编辑II:

为了澄清,在这一点上,我尝试以3种不同的方式运行我的测试文件:

project/tests $ python -m unittest test_a
project/tests $ python -m test_a
project/tests $ ./test_a

这三个都失败了,出现的错误与上面的相同。当我在项目目录中使用相同的三种语法时,我得到这个错误:

ValueError: Attempted relative import beyond toplevel package

再次感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-03 22:48:53

根据我的经验,如果你的项目根目录不是一个包,这是最简单的,如下所示:

project/
  test.py
  run.py
  package/
    __init__.py
    main_program.py
    lib/
      __init__.py
      lib_a
      lib_b
    tests/
      __init__.py
      test_a
      test_b

然而,从Python3.2开始,unittest模块提供了-t选项,它允许您设置顶级目录,因此您可以(从package/):

python -m unittest discover -t ..

更多细节请访问unittest docs

票数 24
EN

Stack Overflow用户

发布于 2017-10-27 02:49:51

我遇到了同样的问题,凯的答案解决了它。我只是想用test.py的内容来补充他的回答(正如@gsanta所问的那样)。我只在Python 2.7上测试过:

from packages.tests import test_a, test_b
import unittest

# for test_a
unittest.main(test_a, exit=False)

# for test_b
unittest.main(test_b)

然后你就可以

../project $ python test.py
票数 6
EN

Stack Overflow用户

发布于 2020-01-23 08:51:18

在测试和包位于同级级别的布局中:

/project
   /tests
   /package

一种方法是在包目录中开始,使用-s仅在测试中发现,并使用-t设置顶级:

../package $ python3 -m unittest discover -s ../tests -t ..
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21490860

复制
相关文章

相似问题

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