Python unittest在Pycharm中运行,但不是从Ternimal运行

时间:2018-04-16 04:03:38

标签: python pycharm

当我使用将内容根添加到PYTHONPATH &运行我的单元测试时在Pycharm(版本2017.3.2 CE)中将源根添加到PYTHONPATH 设置一切正常。

enter image description here

但是,当我尝试 运行终端 取消设置内容根&在pycharm中运行的源根源为PYTHONPATH 。它总是说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(Model文件夹)中的方法时 from Model import model 它总是会说没有名为Model 的模块

因为最后我需要让其他用户在没有安装Pycharm的情况下执行我的代码。我需要在我的代码中集成设置。 谁可以帮忙?

2 个答案:

答案 0 :(得分:0)

将以下代码添加到测试的初始文件中。然后它应该在Pycharm或终端中工作。

import sys
import os
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)

答案 1 :(得分:0)

默认情况下,PyCharm会将项目根添加到PYTHONPATH,禁用将内容根添加到PYTHONPATH 会阻止此行为。

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

看看测试运行配置,你可能有一个工作目录设置为Tests,这意味着Tests将由Python和项目添加到PYTHONPATH根 - 由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包。希望它有意义。