`
junherry
  • 浏览: 95974 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring+iBatis环境下的单元测试问题

    博客分类:
  • Java
阅读更多

在利用Spring和iBatis做一个应用时,用到了数据库连接池。在Spring配置文件中,jndi配置如下

 

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName"><value>jdbc/mysql</value></property>

<property name="lookupOnStartup" value="false"/>

<property name="cache" value="false"/>

<property name="resourceRef" value="true" />

<property name="proxyInterface" value="javax.sql.DataSource"/>

</bean> 

 

但是在junit进行单元测试时,出现了问题。

org.springframework.jndi.JndiLookupFailureException: JndiObjectTargetSource failed to obtain new target object; nested exception is javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)

at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)

at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)

at javax.naming.InitialContext.lookup(Unknown Source)

at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:123)

at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:85)

at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:121)

at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:146)

at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:93)

at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105)

at org.springframework.jndi.JndiObjectTargetSource.getTarget(JndiObjectTargetSource.java:126)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:184)

at $Proxy0.getConnection(Unknown Source)

at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:200)

at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:350)

at org.springframework.test.AbstractTransactionalSpringContextTests.startNewTransaction(AbstractTransactionalSpringContextTests.java:387)

at org.springframework.test.AbstractTransactionalSpringContextTests.onSetUp(AbstractTransactionalSpringContextTests.java:217)

at org.springframework.test.AbstractSingleSpringContextTests.setUp(AbstractSingleSpringContextTests.java:103)

at junit.framework.TestCase.runBare(TestCase.java:128)

at org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java:76)

at junit.framework.TestResult$1.protect(TestResult.java:106)

at junit.framework.TestResult.runProtected(TestResult.java:124)

at junit.framework.TestResult.run(TestResult.java:109)

at junit.framework.TestCase.run(TestCase.java:120)

at junit.framework.TestSuite.runTest(TestSuite.java:230)

at junit.framework.TestSuite.run(TestSuite.java:225)

at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

在junit环境下连接数据源失败,为什么呢,因为jndi是在tomcat下配置的,但是用junit进行单元测试的环境下是独立于tomcat的,不能够与jndi中的数据相连。这种问题有两种解决办法。

一是在进行单元测试时,利用jdbc连接数据库。将Spring配置文件中的dataSource部分改成下面的方式:

 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

<property name="driverClassName">

<value>com.mysql.jdbc.Driver</value>

</property>

<property name="url">

<value>jdbc:mysql://localhost:3306/cms</value>

</property>

<property name="username">

<value>root</value>

</property>

<property name="password">

<value>admin</value>

</property>

</bean>

 

二是利用Spring针对单元测试而扩展的功能:

具体参考如连接:http://203.208.37.132/search?q=cache:4TQHNXE6aTQJ:jim19770812.blogspot.com/2009/07/springjndi.html+单元测试+t连接+jndi失败&cd=1&hl=zh-CN&ct=clnk&gl=cn&st_usg=ALhdy2-zZ_vezSRBqGuC621gPYNmE3L2IA

个人认为第一种方法比较方便,只需要在进行单元测试时利用jdbc的方式,在控制层测试时,可以将其再转换到jndi的方式上去。第二种方法通过扩展Spring的功能,相当于在java代码中重新创建了一个dataSource,而不是通过配置文件。

0
0
分享到:
评论

相关推荐

    Spring+iBatis+DBUnit进行单元测试

    在最近的一个项目中,我尝试使用用DBUnit对Spring+iBatis的架构进行测试,下面记录了DBUnit的使用过程和遇到的一些问题。首先,我们建立一个测试环境(基于Maven2和Oracle数据库*)。数据表名Account。先建立一个...

    spring jar 包详解

    spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    spring jar 包详解spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到spring-mock.jar来进行辅助测试,正式应用系统...

    最新最全的spring开发包

    spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类的...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.6.1. 在Spring环境中建立JPA 12.6.1.1. LocalEntityManagerFactoryBean 12.6.1.2. LocalContainerEntityManagerFactoryBean 12.6.1.3. 处理多个持久化单元 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于...

    Spring 2.0 开发参考手册

    8.2. 单元测试 8.3. 集成测试 8.3.1. Context管理和缓存 8.3.2. 测试fixture的依赖注入 8.3.3. 事务管理 8.3.4. 方便的变量 8.3.5. 示例 8.3.6. 运行集成测试 8.4. 更多资源 II. 中间层数据访问 9. 事务...

    spring chm文档

    8.2. 单元测试 8.3. 集成测试 8.3.1. Context管理和缓存 8.3.2. 测试fixture的依赖注入 8.3.3. 事务管理 8.3.4. 方便的变量 8.3.5. 示例 8.3.6. 运行集成测试 8.4. 更多资源 II. 中间层数据访问 9. 事务...

    Spring in Action(第2版)中文版

    b.2单元测试springmvc控制器 b.2.1模拟对象 b.2.2断言modelandview的内容 b.3使用spring进行综合测试 b.3.1测试装配后的对象 b.3.2综合测试事务处理对象 b.3.3测试数据库 b.3.4使用gienahtesting在junit4中...

    Spring in Action(第二版 中文高清版).part2

    B.2 单元测试Spring MVC控制器 B.2.1 模拟对象 B.2.2 断言ModelAndView的内容 B.3 使用Spring进行综合测试 B.3.1 测试装配后的对象 B.3.2 综合测试事务处理对象 B.3.3 测试数据库 B.3.4 使用Gienah Testing在...

    Spring in Action(第二版 中文高清版).part1

    B.2 单元测试Spring MVC控制器 B.2.1 模拟对象 B.2.2 断言ModelAndView的内容 B.3 使用Spring进行综合测试 B.3.1 测试装配后的对象 B.3.2 综合测试事务处理对象 B.3.3 测试数据库 B.3.4 使用Gienah Testing在...

    Spring中文帮助文档

    12.6.1. 在Spring环境中建立JPA 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.7. 事务管理 12.8. JpaDialect III. The Web 13. Web MVC framework Web框架 13.1...

    Spring API

    12.6.1. 在Spring环境中建立JPA 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.7. 事务管理 12.8. JpaDialect III. The Web 13. Web MVC framework Web框架 13.1...

Global site tag (gtag.js) - Google Analytics