我通常在单独的文件中定义我的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" 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中有一个示例)。很棒的!非常感谢!



