如何使用Spring测试模拟的JNDI数据源?

我对Spring还是很陌生,想知道如何创建使用模拟数据源的JUnit测试以及如何在其中使用JNDI上下文?当前,我的应用程序使用来自tomcat的JNDI上下文来检索连接,并通过该连接从数据库中检索数据。所以我想我需要模拟JNDI调用和数据检索。关于解决此问题的最佳方法的任何很好的指示都是很棒的!非常感谢!

回答:

我通常在单独的文件中定义我的JNDI依赖项,例如datasource-context.xml

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:jee="http://www.springframework.org/schema/jee"

xmlns:p="http://www.springframework.org/schema/p"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/jee

http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">

<jee:jndi-lookup id="dataSource"

jndi-name="java:comp/env/dataSource"

expected-type="javax.sql.DataSource" />

</beans>

这样,在测试资源中,我可以创建另一个文件并定义测试数据源,但是它适合我,例如datasource-testcontext.xml

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource"

p:driverClassName="org.hsqldb.jdbcDriver"

p:url="jdbc:hsqldb:hsql://localhost:9001"

p:username="sa"

p:password="" />

</beans>

然后在测试类中,我使用数据源的测试配置,而不是依赖于JNDI 的生产配置:

@ContextConfiguration({

"classpath*:META-INF/spring/datasource-testcontext.xml",

"classpath*:META-INF/spring/session-factory-context.xml"

})

public class MyTest {

}

如果未在单独的文件中定义数据源,你仍然可以轻松地对JNDI调用返回的对象进行存根:

  • 像这样:在容器外部注入用于JUnit测试的JNDI数据源
  • 或在package中使用类org.springframework.mock.jndi,即。SimpleNamingContextBuilder(在此calass的javadoc中有一个示例)。很棒的!非常感谢!

以上是 如何使用Spring测试模拟的JNDI数据源? 的全部内容, 来源链接: utcz.com/qa/410352.html

回到顶部