Sah*_*and 9 python unit-testing packages
我很难理解软件包,尤其是如何对软件包使用unittest。我看了这个问题(),但该问题的正确答案并不能解决我的问题。我有以下结构:
model
|-- __init__.py
|-- boardmodel.py
|
|-- exceptions
| |
| |-- __init__.py
| |-- exceptions.py
|
|-- test
|-- __init__.py
|-- test_boardmodel.py
Run Code Online (Sandbox Code Playgroud)
具有以下文件/导入:
型号/__init__.py:
import model.exceptions.exceptions
import model.boardmodel
Run Code Online (Sandbox Code Playgroud)
模型/异常/__init__.py:
不包含任何内容
型号/测试/__init__.py:
不包含任何内容
在boardmodel.py中导入:
from model.exceptions.exceptions import ZeroError, OverlapError, ArgumentError, ProximityError
Run Code Online (Sandbox Code Playgroud)
导入test_boardmodel.py内部:
import unittest
from model.boardmodel import Board, Ball, Wall
from model.exceptions.exceptions import ProximityError
Run Code Online (Sandbox Code Playgroud)
我将自己放在模型目录中,然后运行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'
Run Code Online (Sandbox Code Playgroud)
我对导入的工作方式以及执行import语句时查找模块/包的位置感到迷惑。为什么model找不到?
我要补充一点,如果我model.从列出的所有导入中删除,则测试可以正常工作,但是我不能再使用“外部”的软件包了:
src
|-- visual.py
|
|-- model
|-- __init__.py
|-- boardmodel.py
|
|-- exceptions
| |
| |-- __init__.py
| |-- exceptions.py
|
|-- test
|-- __init__.py
|-- test_boardmodel.py
Run Code Online (Sandbox Code Playgroud)
在visual.py内部:
import model
from model.boardmodel import Board
Run Code Online (Sandbox Code Playgroud)
小智 5
我面临着同样的问题,能够从多个文件中导入某些模块,但不能从测试文件中导入某些模块,因此我看到了以下解决方案:
如果您有test / my_test.py,则测试应以以下方式运行:
Run Code Online (Sandbox Code Playgroud)python -m test.my_test
之后,我导入了我想要的东西,没有任何错误。