用mock对象替换JNDI查找

时间:2013-06-25 10:56:03

标签: java spring spring-mvc mocking jndi

我正在使用jndi执行数据库查找:

<jee:jndi-lookup id="myDataSource" jndi-name="jdbc/mydb"
        resource-ref="true" expected-type="javax.sql.DataSource" />

在spring上下文文件中,我使用:

调用构造函数
<bean id="myController " class="com.MyController">
<constructor-arg index="0" ref="myDataSource" />
</bean>

我不再希望通过jndi查找公开“myDataSource”,因此我创建了一个与“javax.sql.DataSource”类型相同的模拟对象,并将其用作构造函数参数:

<bean id="myMockDataSource" class="com.mock.MyMockDataSourceConnection">
</bean>

<bean id="myController" class="com.MyController">
<constructor-arg index="0" ref="myMockDataSource" />
</bean>

模拟对象只返回虚拟连接。

这是正确的方法,以便在想要使用模拟对象时更长时间使用jndi查找吗?

1 个答案:

答案 0 :(得分:0)

您可能希望查看Spring的SimpleNamingContextBuilder类,这对于构建JNDI树非常有用,而无需Java EE容器。

class JndiMock
{
    public void init()
    {
        SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
        builder.bind( "jdbc/mydb" , new YourDummyConnectionClass() );
        builder.activate();
    }
...
}

(这是来自记忆,但应该给你一个想法)。您可以使用init-method属性在应用程序上下文XML描述符中将其实例化为单例:

<bean id="jndimock" class="your.package.JndiMock" init-method="init" />

并使其在jee:jndi-lookup之前创建。

干杯,