当前位置: 首页 > news >正文

junit测试时,出现java.lang.IllegalStateException: Failed to load ApplicationContext

课程设计要求进行junit测试,我是在已经做好的ssh项目上做的测试,测试类代码如下

package com.zhang.web.services;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import javax.annotation.Resource;  

import org.junit.runner.RunWith;  
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.ContextConfiguration;  
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  

@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration(locations="classpath:spring-beans.xml")  
public class UserDAOTest extends AbstractJUnit4SpringContextTests{
@Resource(name="userDAO") 
private UserDAO userDAO;

public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}

@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}

@Test
public void testFindUser() {
assertEquals(userDAO.findUser(0),null);
}

}

运行测试时,出现如下错误

SEVERE: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@a15856] to prepare test instance [com.zhang.web.services.UserDAOTest@aea288]
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [spring-beans.xml]; nested exception is java.io.FileNotFoundException: class path resource [spring-beans.xml] cannot be opened because it does not exist

解决办法是,把spring-beans.xml配置文件复制到src目录下。

问题原因:本人一直认为eclipse的classpath包括web-inf目录,其实不然。我们可以打开web项目下的.classpath文件,其内容如下

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre7">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v7.0">
<attributes>
<attribute name="owner.project.facets" value="jst.web"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/spring3"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/struts"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/hibernate"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
在这,我们并没有看到类路径包含web-inf目录。
假如我们往里边添加<classpathentry kind="src" path="WebContent/WEB-INF"/>
再重启eclipse,你会发现以上出现的问题不存在了,test类成功运行。

相关文章:

  • 我的Android进阶之旅------Android【设置】-【语言和输入法】-【语言】列表中找到相应语言所对应的列表项...
  • BZOJ1075 : [SCOI2007]最优驾车drive
  • SharePoint自动化系列——Create a local user and add to SharePoint
  • iOS 轻量级的数据库leveldb
  • 混合的方式开启服务
  • JSDOM对象控制HTML元素
  • NSObject
  • android 环境搭建
  • AJAX 跨域请求 - JSONP获取JSON数据 jsson和jsonp
  • 点击失去焦点的文字
  • mac 终端 常用命令
  • HP ProLiant DL380 G6 服务器 - 清 BIOS 的方法
  • Mysql isam数据库恢复实战
  • A*寻路算法的探寻与改良(二)
  • 让透明div里的文字不透明
  • 4个实用的微服务测试策略
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Android系统模拟器绘制实现概述
  • Angular 2 DI - IoC DI - 1
  • GitUp, 你不可错过的秀外慧中的git工具
  • nginx 负载服务器优化
  • Vue--数据传输
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 仿天猫超市收藏抛物线动画工具库
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 前端面试之闭包
  • 使用 Docker 部署 Spring Boot项目
  • 数据结构java版之冒泡排序及优化
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​什么是bug?bug的源头在哪里?
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #pragma multi_compile #pragma shader_feature
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (poj1.2.1)1970(筛选法模拟)
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)为什么要选择C++
  • (转)Windows2003安全设置/维护
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .NET BackgroundWorker
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .net连接MySQL的方法
  • .net专家(张羿专栏)
  • ?
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [Angularjs]ng-select和ng-options