pycharm 单元测试失败 not found while handling absolute import

pycharm 单元测试运行错误

RuntimeWarning: Parent module ‘tests‘ not found while handling absolute import
import unittest
RuntimeWarning: Parent module ‘tests‘ not found while handling absolute import
import datetime as dt

Pycharm import RuntimeWarning after updating to 2016.2.

用老版本的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)
时间: 2024-10-12 06:26:34

pycharm 单元测试失败 not found while handling absolute import的相关文章

Pygame模块在Pycharm导入失败解决

当安装完pygame包,且已经在windows命令行界面看到import pygame成功,如下 但是在pycharm上导入import却失败,如下 这是因为Pygame默认安装到C盘,但一般我们pycharm的python文件放到非C盘,所以要为pycharm加入pygame包找到pygame的安装路径,拷贝其pygame.pygame-1.9.6.dist-info两个文件夹至python项目文件D:\PythonProject\venv\Lib\site-packages目录下即可源文件

pycharm连接数据库失败

在pycharm里面配置数据库, user和password输入均正确,数据库中也确实有该表. 但是就是连接不上 解决办法, 在URL后面加上 ?serverTimezone=UTC 原文地址:https://www.cnblogs.com/btxlc/p/11174017.html

Python相对、绝对导入浅析

这篇文章从另外一个不同的视角来分析一下Python的import机制,主要的目的是为了搞懂import中absolute.relative import遇到的几个报错. 这里不同的视角是指从Python import hooks这个方面来展开,当然本身关于Python import hooks有很多的文章,我这里不打算展开聊这个方面的内容,文章中主要会结合代码和PEP 302 – New Import Hooks这个PEP. 1. 几个跟import相关模块属性 首先我们需要了解几个跟impor

单元测试React

React单元测试——十八般兵器齐上阵,环境构建篇 一个完整.优秀的项目往往离不开单元测试的环节,就 github 上的主流前端项目而言,基本都有相应的单元测试模块. 就 React 的项目来说,一套完整的单元测试能在在后续迭代更新中回归错误时候给与警示,但鉴于 React 本身的特殊性,我们又常常将其与 webpack 等工具相结合,其单元测试的部署相比常规的项目要折腾的多. 本文将作为 React 单元测试系列的开篇,和大家一同逐步构建其单元测试的环境. 你可以在我的仓库下载到本文的示例.

JUnit(4)单元测试利器 JUnit 4

引言 毋庸置疑,程序员要对自己编写的代码负责,您不仅要保证它能通过编译,正常地运行,而且要满足需求和设计预期的效果.单元测试正是验证代码行为是否满足预期的有效手段之一.但不可否认,做测试是件很枯燥无趣的事情,而一遍又一遍的测试则更是让人生畏的工作.幸运的是,单元测试工具 JUnit 使这一切变得简单艺术起来. JUnit 是 Java 社区中知名度最高的单元测试工具.它诞生于 1997 年,由 Erich Gamma 和 Kent Beck 共同开发完成.其中 Erich Gamma 是经典著作

【MVC 4】4.MVC 基本工具(Visual Studio 的单元测试、使用Moq)

 作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> 3.Visual Studio 的单元测试 有很多.NET单元测试包,其中很多是开源和免费的.本文打算使用 Visual Studio 附带的内建单元测试支持,但其他一些.NET单元测试包也是可用的. 为了演示Visual Studio的单元测试支持,本例打算对示例项目添加一个 IDiscountHelper 接口的新实现. 在 Models 文件夹下新建类文件 MinimumDiscountHelpe

单元测试——使用模拟对象做交互测试

最近在看.net单元测试艺术,我也喜欢单元测试,这里写一下如何在测试中使用模拟对象. 开发的过程中,我们都会遇到对象间的依赖,比如依赖数据库或文件,这时,我们需要使用模拟对象,来进行测试,我们可以手写模拟对象,当然也可以使用模拟框架. 假如有这样的一个需求,当用户登陆时,我需要对用户名和密码进行验证,然后再将用户名写入日志中. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class MyLogin     {         pu

Centos6.7安装Pycharm及升级JDK

首先到pycharm官网下载pycharm压缩包 wget https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=linux 解压 tar -zx -f pycharm-community-2017.1.tar.gz 切换到pycharm解压目录下的bin目录 [[email protected] 15:38 ~/Downloads]#cd pycharm-community-2017.1/bin [[e

MVC 基本工具(Visual Studio 的单元测试、使用Moq)

3.Visual Studio 的单元测试 有很多.NET单元测试包,其中很多是开源和免费的.本文打算使用 Visual Studio 附带的内建单元测试支持,但其他一些.NET单元测试包也是可用的. 为了演示Visual Studio的单元测试支持,本例打算对示例项目添加一个 IDiscountHelper 接口的新实现. 在 Models 文件夹下新建类文件 MinimumDiscountHelper.cs : namespace EssentiaTools.Models { public