Python 单元测试适用于 Pycharm,但不适用于终端

标签 python pycharm

当我在 Pycharm(版本 2017.3.2 CE)中使用 Add content roots to PYTHONPATH & Add source roots to PYTHONPATH 设置运行我的单元测试时,一切正常。

enter image description here

但是当我尝试运行终端 将内容根和源根取消设置为 PYTHONPATH 在 pycharm 中运行。它总是说 ImportError: No module named ***

我的文件夹结构如下:

-Project
-Controller
 -__init__.py
 -test_controller.py
-Model
  - __init__.py
  -model.py
-Tests
   -__init__.py
   -someunittest.py

当 test_controller.py 调用 model.py(模型文件夹)中的方法时,例如 从模型导入模型 它总是会说No module named Model

因为最后我需要让其他用户在不安装 Pycharm 或其他东西的情况下执行我的代码。我需要将设置集成到我的代码中。 谁能帮忙?

最佳答案

PyCharm 将项目根添加到 PYTHONPATH默认情况下,禁用 Add content roots to PYTHONPATH 可防止此行为。

还有一个重要时刻需要理解:当您使用 python path/to/script.py 运行脚本时Python 将脚本目录添加到 PYTHONPATH .

查看测试运行配置,您可能将工作目录设置为 Tests , 表示 Tests将被添加到 PYTHONPATH通过 Python,项目根目录 - 通过 PyCharm。禁用将内容根添加到 PYTHONPATH,PyCharm 不会将项目根添加到 PYTHONPATH Python 不会找到 Model包。

要使其在终端上运行,您必须注意您所做的确切调用,例如:

cd <project_root>
python -m unittest Tests.test_something
# or
python -m unittest discover Tests/

没问题,Python 会将当前工作目录(项目根目录)添加到 PYTHONPATH .

cd Tests
python -m unittest test_something.py

将失败 - <project_root>不在 PYTHONPATH 中, Python 无法解析 Model包裹。希望它有意义。

关于Python 单元测试适用于 Pycharm,但不适用于终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49849475/

相关文章:

python - 如何按面积排序opencvconnectedComponentewithStat?

python - QThread:线程仍在运行时被销毁

python - 无法在 Django 项目中导入 View

pycharm - 同一个文件,多个选项卡,pycharm

python-3.x - mac 上的 Pycharm - 在 pycharm 的 ''(引号)之前禁用方形符号

Python 生成器和产量 : How to know which line the program is at

python - hadoop,python,子进程失败,代码为 127

python - 如何使用 PyCharm 启动远程调试?

python - 如何顺序运行多个 python 脚本?

python - 为什么我的 __file__ 路径同时包含正斜杠和反斜杠?