繁体   English   中英

Python unittest导入问题

[英]Python unittest import problems

我很难理解包,特别是如何将unittest与包一起使用。 我看了这个问题(),但对这个问题的正确答案并没有解决我的问题。 我有以下结构:

model
|-- __init__.py
|-- boardmodel.py
|
|-- exceptions
|   |
|   |-- __init__.py
|   |-- exceptions.py
|
|-- test
    |-- __init__.py
    |-- test_boardmodel.py

使用以下文件/导入:

模型/ __ init__.py:

import model.exceptions.exceptions
import model.boardmodel

模型/异常/ __ init__.py:

什么都没有

模型/测试/ __ init__.py:

什么都没有

boardmodel.py中导入:

from model.exceptions.exceptions import ZeroError, OverlapError, ArgumentError, ProximityError

test_boardmodel.py中导入:

import unittest

from model.boardmodel import Board, Ball, Wall
from model.exceptions.exceptions import ProximityError

我把自己放在模型目录中,然后运行python -m unittest test.test_boardmodel.py 我收到以下消息:

ERROR: test_boardmodel (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: test_boardmodel
Traceback (most recent call last):
  File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 153, in loadTestsFromName
    module = __import__(module_name)
  File "/Users/sahandzarrinkoub/Documents/Programming/pythonfun/BouncingBalls/balls/src/model/test/test_boardmodel.py", line 3, in <module>
    from model.boardmodel import Board, Ball, Wall
ModuleNotFoundError: No module named 'model'

在执行import语句时,我对导入的工作原理以及模块/包的查找位置感到有点迷茫。 为什么找不到model

我将补充一点,如果我删除model. 从列出的所有导入,测试工作,但我不能再使用“外部”包:

src
|-- visual.py
|
|-- model
    |-- __init__.py
    |-- boardmodel.py
    |
    |-- exceptions
    |   |
    |   |-- __init__.py
    |   |-- exceptions.py
    |
    |-- test
        |-- __init__.py
        |-- test_boardmodel.py

visual.py里面

import model
from model.boardmodel import Board

我遇到了同样的问题,能够从几个文件导入一些模块,但不能从测试文件导入,所以我看到了这个解决方案:

如果你有test / my_test.py,测试应该运行如下:

 python -m test.my_test 

在那之后,我导入了我想要的并且没有错误。

我相信标准的包结构是

  myproject
  ├── myproject
  ├── tests
  └── scripts

如果要在不安装软件包的情况下运行测试,请从顶部myproject文件夹运行它们,以便import myproject在测试中成功。 (对于脚本也是如此。)为此,要在myproject使用绝对导入或显式相对导入。

尝试在import语句上面添加以下内容:

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM