IDEA 单元测试报错:Class not found:xxxx springboot的解决

目录
  • IDEA单元测试报错:Class not found:xxxx springboot
    • 报错
    • 解决
  • 让人抓狂的ClassNotFoundException
    • 启动项目时,始终出现如下错误提示
    • 在项目的pom文件,添加了以下代码

IDEA单元测试报错:Class not found:xxxx springboot

报错

引入了新依赖,想着在测试模块进行测试。

结果报错说

Class not found:xxxx

说找不到这个类。

解决

把安装了新依赖的父工程 重新 install一下 再进行测试。

测试通过

让人抓狂的ClassNotFoundException

我们的项目基于Spring Boot + Maven,采用Intelli IDEA工具进行开发。代码在另一名同事的机器上检出之后,

启动项目时,始终出现如下错误提示

03-11 15:41:23[org.springframework.boot.SpringApplication-825][main][13298] - Application startup failed
java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletResponse
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethods(Class.java:1975)
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:609)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:521)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:507)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:241)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1069)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1042)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:764)
at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:357)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:305)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1124)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1113)
at cn.com.icaifeng.Application.main(Application.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletResponse
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 29 more

开始怀疑是JDK或JRE设置的问题,但项目完全可以编译成功,所以此点可以排除。从错误信息:<code> javax/servlet/http/HttpServletResponse</code>可以看是Servlet的问题,Sevlet是java的web server一个容器,那么是不是表示这个容器类无法加载进行初始化?利用bing及百度做了一些查找(不要问为什么不用google),并未找到解决方案。

折腾了三个小时之后,最终放弃了直接解决这个问题。让同事重新安装了Intell IDEA,并重新下载代码进行编译运行,居然一切正常,真让人想哭又想笑!自己内心松了一口气,虽然并未找到真正的原因,但终究这个问题消失了。

“欠下的债,终究要还的!”在没过两日的今天,在自己的机器居然也出现了这种问题,折腾近一个小时仍旧没有找到原因与解决办法,真是有点让人奔溃,有点想放弃了。

但转念一想,如果今日放弃,想必日后肯定还会再次遇到,何不今日多花点时间,彻底弄清这个问题,找出原因与解决方案。

没有了内心的烦躁与焦虑,自己反而能够静心地把错误的信息想了又想,推测各种可能的原因。加上之前的种种尝试的失败,基本断定是web server容器的问题。

上网查了一些资料,发现如果容器出现问题,确实会报此种错误。项目使用了spring boot的内嵌tomcat作为web server,那么很有可能是这个容器出现了问题。

虽然Maven也加载了spring boot的tomcat包,但是不是这个包损坏或存在问题。

在项目的pom文件,添加了以下代码

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>

更新了Maven的依赖包,重新编译运行,奇迹发生了,一切OK,内心真是有点小激动!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • IDEA 单元测试创建方法详解(2020.03版本亲测)

    IntelliJ IDEA创建单元测试 在 Android 中,单元测试基于 JUnit,JUnit 的平面使用足以测试完全基于 Java 代码的功能. 但是,为了测试 Android 特定的功能,您需要一堆构建在 JUnit 之上的包装类.IntelliJ IDEA 简化了 Android 测试项目构建过程中的大部分任务. 1.确保你的代码是可测试的 单元测试要求源代码的编写方式使得模块之间的依赖关系可以很容易地通过模仿来消除.另外,单元测试要求功能相互隔离. 因为这个 HelloDroid

  • idea +junit单元测试获取不到bean注入的解决方式

    如图,刚开始报错获取不到bean因为配置文件 1.原因一: *.properties等没有值,还是用${变量的}.获取不到,于是把所有值复制到properties文件里. 2.原因二: springmvc.xml 没有某些静态资源获取报错,把src的resources下的springmvc.xml复制到test目录的resources下,删除静态资源引用. 3.原因三: 可去掉log4j配置. 补充知识:IDEA的junit单元测试Scanner输入无效 在idea的junit单元测试中用Sca

  • 教你用IDEA配置JUnit并进行单元测试

    一.JUnit 是什么? JUnit 是一个 Java 语言的回归测试框架(regression testing framework),由 Kent Beck 和 Erich Gamma 建立. Junit 测试也是程序员测试,即所谓的白盒测试,它需要程序员知道被测试的代码如何完成功能,以及完成什么样的功能. 二.IDEA 的 JUnit 配置 (1)添加junit的依赖jar包      junit-4.12.jar.hamcrest-core-1.3.jar Maven项目pom配置: Ma

  • 关于IDEA的junit单元测试Scanner输入不可用的问题(多种原因分析)

    这是IDEA的单元测试的默认设置问题 eclipse默认可用 解决方法: 修改IDEA的配置文件,在配置文件中最后一行,加入一条语句 -Deditable.java.test.console=true 添加方法: 方法一:在IDEA里面,点击help->Edit Custom Vm Options- 这样就进入了idea64.exe.vmoptions配置文件,在最后一行复制:加入如上语句后,保存重启即可. 另外可以直接在IDEA的bin目录下的idea64.exe.vmoptions文件中复制

  • IDEA 单元测试覆盖技巧分享

    1.前言 通常情况下,项目经理or项目总监会分阶段的问测试负责人,本阶段的测试覆盖率是多少?在工作中,当被问到"如何提高代码质量",回答无非如下几个,增加评审,代码规约,单元测试.不知起自何年何月,如今一些机构开始引入"单元测试覆盖率"的概念,并由此对程序员提出了覆盖率要达到70%,90%,以此来评判程序员工作的质量,以及产品的质量.这里先预为单元测试下定义以免混淆,即,基于Junit,类与代码级别的,与运行时无关的白盒测试. 2.我的理解 测试覆盖率应该区分自动化

  • IDEA 单元测试报错:Class not found:xxxx springboot的解决

    目录 IDEA单元测试报错:Class not found:xxxx springboot 报错 解决 让人抓狂的ClassNotFoundException 启动项目时,始终出现如下错误提示 在项目的pom文件,添加了以下代码 IDEA单元测试报错:Class not found:xxxx springboot 报错 引入了新依赖,想着在测试模块进行测试. 结果报错说 Class not found:xxxx 说找不到这个类. 解决 把安装了新依赖的父工程 重新 install一下 再进行测试

  • SpringBootTest单元测试报错的解决方案

    目录 SpringBootTest单元测试报错 单元测试 @mock和@SpringBootTest使用 一.单元测试工具mock使用 二.springboot使用@SpringBootTest单元测试 三.mock和@springBootTest区别 SpringBootTest单元测试报错 @RunWith(SpringRunner.class) @SpringBootTest(classes = { DataRulesApplication.class }) @EnableAutoConf

  • mysql登录报错提示:ERROR 1045 (28000)的解决方法

    本文分析了mysql登录报错提示:ERROR 1045 (28000)的解决方法.分享给大家供大家参考,具体如下: 一.问题: 公司linux系统的mysql数据库root用户设置过密码,但常常用命令'mysql -u root -p'登录报错,有时又能登录.登录报错信息为: [root@localhost ~]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localho

  • pip matplotlib报错equired packages can not be built解决

    pip安装matplotlib 在centos6.5 64bit上用pip安装matplotlib时候报错: * The following required packages can not be built: * freetype, png error: Setup script exited with 1 这是因为pip不能安装操作系统的依赖库导致的,需要用yum手动安装: $ yum -y install freetype-devel libpng-devel 如果不知道这些库需要安装的

  • Python使用pickle模块报错EOFError Ran out of input的解决方法

    本文实例讲述了Python使用pickle模块报错EOFError Ran out of input的解决方法.分享给大家供大家参考,具体如下: 遇到了 EOFError:Ran out of input 不到为什么这样,最后用捕获异常的办法解决掉了,暂时对程序本身没有啥影响,代码如下: # coding=utf-8 import pickle def usr_date(): try: with open('usr_date.pkl','rb') as f: return pickle.load

  • 安装CentOS 6.x报错"Disk sda contains BIOS RAID metadata"解决方法

    今天在安装CentOS6.2的时候,当进到检测硬盘的时候,总是过不去,报错如下: Disk sda contains BIOS RAID metadata, but is not part of any recognized BIOS RAID sets. Ignoring disk sda 这种情况在Ubuntu,SUSE都有类似的情况,只是提示不太一样. 有时候是sda,有时候是sdb. 感觉是这块硬盘以前是做过raid,现在不认.怎么办. 进入安装选择菜单时 按TAB键,会进入到Linux

  • Maven install 报错"程序包不存在"问题的解决方法

    概述 在mvn clean install时,控制台各种报错,大概有: java:[8,52] 程序包com.xxx不存在 java:[98,27] 找不到符号 符号: 类 XXX 位置: 类XXX [ERROR] COMPILATION ERROR : Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure  at org.apache.maven.plugin.c

  • Python报错:PermissionError: [Errno 13] Permission denied的解决办法

    问题描述: 我一直用python处理气象数据,之前写过一个处理气象数据的程序,一直都可以用的,可是昨天我再想处理数据的时候提示我如下错误 Traceback (most recent call last): ...中间忽略 File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\site-packages\xarray\backends\file_manager.py", line 205,

  • 安装CentOS 6.x报错"Disk sda contains BIOS RAID metadata"解决方法

    今天在安装CentOS6.2的时候,当进到检测硬盘的时候,总是过不去,报错如下: Disk sda contains BIOS RAID metadata, but is not part of any recognized BIOS RAID sets. Ignoring disk sda 这种情况在Ubuntu,SUSE都有类似的情况,只是提示不太一样. 有时候是sda,有时候是sdb. 感觉是这块硬盘以前是做过raid,现在不认.怎么办. 进入安装选择菜单时 按TAB键,会进入到Linux

  • Mysql数据库delete操作没报错却删除不了数据的解决

    1.在操作页面执行删除操作,但没有删除成功,删除过程无报错(以下为删除操作的控制台日志) 2.在数据库执行删除操作 表数据 执行删除语句删除staffId为3的数据 结果却没有删除成功 3.原因 staffId为3的数据的flag为Null,虽然delete from staff where staffId=3 and flag != 1语句中的flag != 1说明了删除除1以外的数据,但却没有删除flag为Null的数据 4.解决办法 把staffId为3的flag置为0 再次执行delet

随机推荐