pycharm下运行unittest的问题
环境:
系统:window7 64
软件:pycharm
版本:2016.3.2
问题描述:
使用unittest类的时候出现问题,问题截图如下
Pycharm 2016.2执行单元测试遇到如下问题:
RuntimeWarning: Parent module ‘YOUR_MODULE_HERE’ not found while handling absolute import
import unittest
解决方法,使用旧的utrunner.py文件替换当前版本,文件路径为…/PyCharm.app/Contents/helpers/pycharm/utrunner.py(macos平台)或者…\JetBrains\PyCharm 2016.2.2\helpers\pycharm\utrunner.py(windows平台)。utrunner.py的内容如下(替换文件前请先做好备份):
utrunner.py如下:
- import sys
- import imp
- import os
- import fnmatch
- helpers_dir = os.getenv("PYCHARM_HELPERS_DIR", sys.path[0])
- if sys.path[0] != helpers_dir:
- sys.path.insert(0, helpers_dir)
- from tcunittest import TeamcityTestRunner
- from nose_helper import TestLoader, ContextSuite
- from pycharm_run_utils import import_system_module
- from pycharm_run_utils import adjust_sys_path
- from pycharm_run_utils import debug, getModuleName, PYTHON_VERSION_MAJOR
- adjust_sys_path()
- os = import_system_module("os")
- re = import_system_module("re")
- modules = {}
- def loadSource(fileName):
- baseName = os.path.basename(fileName)
- moduleName = os.path.splitext(baseName)[0]
- # for users wanted to run unittests under django
- #because of django took advantage of module name
- settings_file = os.getenv('DJANGO_SETTINGS_MODULE')
- if settings_file and moduleName == "models":
- baseName = os.path.realpath(fileName)
- moduleName = ".".join((baseName.split(os.sep)[-2], "models"))
- if moduleName in modules and len(sys.argv[1:-1]) == 1: # add unique number to prevent name collisions
- cnt = 2
- prefix = moduleName
- while getModuleName(prefix, cnt) in modules:
- cnt += 1
- moduleName = getModuleName(prefix, cnt)
- debug("/ Loading " + fileName + " as " + moduleName)
- if os.path.isdir(fileName):
- fileName = fileName + os.path.sep
- module = imp.load_source(moduleName, fileName)
- modules[moduleName] = module
- return module
- def walkModules(modulesAndPattern, dirname, names):
- modules = modulesAndPattern[0]
- pattern = modulesAndPattern[1]
- # fnmatch converts glob to regexp
- prog_list = [re.compile(fnmatch.translate(pat.strip())) for pat in pattern.split(',')]
- for name in names:
- for prog in prog_list:
- if name.endswith(".py") and prog.match(name):
- modules.append(loadSource(os.path.join(dirname, name)))
- # For default pattern see https://docs.python.org/2/library/unittest.html#test-discovery
- def loadModulesFromFolderRec(folder, pattern="test*.py"):
- modules = []
- # fnmatch converts glob to regexp
- prog_list = [re.compile(fnmatch.translate(pat.strip())) for pat in pattern.split(',')]
- for root, dirs, files in os.walk(folder):
- files = [f for f in files if not f[0] == '.']
- dirs[:] = [d for d in dirs if not d[0] == '.']
- for name in files:
- for prog in prog_list:
- if name.endswith(".py") and prog.match(name):
- modules.append(loadSource(os.path.join(root, name)))
- return modules
- testLoader = TestLoader()
- all = ContextSuite()
- pure_unittest = False
- def setLoader(module):
- global testLoader, all
- try:
- module.__getattribute__('unittest2')
- import unittest2
- testLoader = unittest2.TestLoader()
- all = unittest2.TestSuite()
- except:
- pass
- if __name__ == "__main__":
- arg = sys.argv[-1]
- if arg == "true":
- import unittest
- testLoader = unittest.TestLoader()
- all = unittest.TestSuite()
- pure_unittest = True
- if len(sys.argv) == 2: # If folder not provided, we need pretend folder is current
- sys.argv.insert(1, ".")
- options = {}
- for arg in sys.argv[1:-1]:
- arg = arg.strip()
- if len(arg) == 0:
- continue
- if arg.startswith("--"):
- options[arg[2:]] = True
- continue
- a = arg.split("::")
- if len(a) == 1:
- # From module or folder
- a_splitted = a[0].split("_args_separator_") # ";" can't be used with bash, so we use "_args_separator_"
- if len(a_splitted) != 1:
- # means we have pattern to match against
- if os.path.isdir(a_splitted[0]):
- debug("/ from folder " + a_splitted[0] + ". Use pattern: " + a_splitted[1])
- modules = loadModulesFromFolderRec(a_splitted[0], a_splitted[1])
- else:
- if os.path.isdir(a[0]):
- debug("/ from folder " + a[0])
- modules = loadModulesFromFolderRec(a[0])
- else:
- debug("/ from module " + a[0])
- modules = [loadSource(a[0])]
- for module in modules:
- all.addTests(testLoader.loadTestsFromModule(module))
- elif len(a) == 2:
- # From testcase
- debug("/ from testcase " + a[1] + " in " + a[0])
- module = loadSource(a[0])
- setLoader(module)
- if pure_unittest:
- all.addTests(testLoader.loadTestsFromTestCase(getattr(module, a[1])))
- else:
- all.addTests(testLoader.loadTestsFromTestClass(getattr(module, a[1])),
- getattr(module, a[1]))
- else:
- # From method in class or from function
- debug("/ from method " + a[2] + " in testcase " + a[1] + " in " + a[0])
- module = loadSource(a[0])
- setLoader(module)
- if a[1] == "":
- # test function, not method
- all.addTest(testLoader.makeTest(getattr(module, a[2])))
- else:
- testCaseClass = getattr(module, a[1])
- try:
- all.addTest(testCaseClass(a[2]))
- except:
- # class is not a testcase inheritor
- all.addTest(
- testLoader.makeTest(getattr(testCaseClass, a[2]), testCaseClass))
- debug("/ Loaded " + str(all.countTestCases()) + " tests")
- TeamcityTestRunner().run(all, **options)
相关文档:
- Pycharm import RuntimeWarning after updating to 2016.2 - 简书
- RuntimeWarning: Parent module ‘YOUR_MODULE_HERE’ not found while handling absolute import : PY-20171
- RuntimeWarning: Parent module ‘settings’ not found while handling absolute import - 常城的专栏 - 博客频道 - CSDN.NET
- http://blog.csdn.net/wirelessqa/article/details/53465854
本人个人博客:巫章鹏的个人博客
pycharm下运行unittest的问题的更多相关文章
- 亲测——pycharm下运行第一个scrapy项目 ©seven_clear
最近在学习scrapy,就想着用pycharm调试,但不知道怎么弄,从网上搜了很多方法,这里总结一个我试成功了的. 首先当然是安装scrapy,安装教程什么的网上一大堆,这里推荐一个详细的:http: ...
- Pycharm下运行程序查看每个变量的值的方法(类似于Spyder和MATLAB)
昨天,用了大量篇幅讲了Spyder的各种问题,之所以要用Spyder,最重要的一个原因就是能够非常方便的查看中间变量的值.类似MATLAB的工作空间,非常方便.如下图所示: 但是Spyder的代码自动 ...
- pycharm下运行和调试scrapy项目
1. 新建项目 默认在本地已经新建了一个scrapy爬虫项目 2. 打开项目 点击open à 选择刚刚那个本地的scrapy项目meijutt100 3. 项目结构 各个py文件的作用不作介绍,不懂 ...
- pycharm右键运行unittest、pytest文件
在实际学习过程中,有时候会出现右键运行文件,但没有任何结果的情况.这就是没有使用unittest/pytest 的方式运行. 解决方法: 添加好
- PyCharm 默认运行 unittest
若文件里面有某个函数名称或模块名称以test为前缀,Pycharm的话,就会自动认为是单元测试: 报错信息:test_file() missing 1 required positional argu ...
- Pycharm取消默认的右击运行unittest方法
Pycharm取消默认的右击运行unittest方法:File-> Settings -> Tools -> Python Integrated Tools -> Defaul ...
- PyCharm下创建并运行我们的第一个Django项目
PyCharm下创建并运行我们的第一个Django项目 准备工作: 假设读者已经安装好python 2x或3x,以及安装好Django,以及Pycharm 1. 创建一个新的工程 第一次运行Pycha ...
- pycharm上运行django服务器端、ip地址访问
安装Django 下载Django包,解压缩. CMD 进入解压路径下. 执行:python setup.py install 增加环境变量: C:\Python27\Scripts 测试djang ...
- pycharm上运行django服务器端、以及创建app方法
快来加入群[python爬虫交流群](群号570070796),发现精彩内容. 安装Django 下载Django包,解压缩. CMD 进入解压路径下. 执行:python setup.py in ...
随机推荐
- 954I Yet Another String Matching Problem
传送门 分析 我们先考虑暴力如何计算 对于S的子串SS,如果它有位置i使得SS[i] != T[i]那么我们就将两个字符之间用并查集连边 最后答案很明显就是并查集中所有边的个数 于是我们可以发现对于S ...
- JMS 之 Active MQ 的消息传输
本文使用Active MQ5.6 一.消息协商器(Message Broker) broke:消息的交换器,就是对消息进行管理的容器.ActiveMQ 可以创建多个 Broker,客户端与Active ...
- 打开程序出现.Net Framework Initialization Error – Unable to find a version of the runtime to run this applicatio的解决办法
部署一个VS2010开发的程序时遇到 了一个非常奇怪的问题,客户端上已经安装了.net framework 4.0,但运行时还是会弹出错误: .Net Framework Initialization ...
- activiti监听器
activiti使用的时候,通常需要跟业务紧密的结合在一起,有些业务非常的复杂,通常有如下一些场景: 1.activiti人员动态的分配. 2.当前任务节点完成的时候,指定需要指定下一个节点的处理人( ...
- JSTL标签总结备用
前言 ========================================================================= JSTL标签库,是日常开发经常使用的,也是众多 ...
- mysql复制表以及复制数据库
(一)将旧表复制到新表 1.CREATE TABLE新表 SELECT* FROM旧表; 该语句只是复制表结构以及数据,它不会复制与表关联的其他数据库对象,如索引,主键约束,外键约束,触发器等. CR ...
- Raspberry Pi 3 安装 Lazarus 1.6.2(2017-02-09更新)
Raspberry Pi3 Lazarus 1.6.2 安装步骤如下: 安装环境:Raspbian Jessie, RPi3 1.安装subversion和unzip Sudo Apt-get upd ...
- Android-bindService远程服务启动其他应用的Activity
Service2应用,在AndroidManifest.xml文件中对外暴露MyService2服务: <!-- 代表在应用程序里,当需要该service时,会自动创建新的进程. android ...
- HTML5+CSS3+jQuery Mobile轻松构造APP与移动网站 (陈婉凌) 中文pdf扫描版
<HTML5+CSS3+jQuery Mobile轻松构造APP与移动网站>以HTML与CSS为主,配合jQuery制作网页,并搭配jQueryMobile制作移动网页,通过具体的范例从基 ...
- 解决 centos 7 部署 tomcat 后外部不能访问应用(端口、防火墙)
https://blog.csdn.net/Rebs_Hugo/article/details/85042602