【问题标题】:Replace JNDI lookup with mock object用模拟对象替换 JNDI 查找
【发布时间】:2013-06-25 10:56:02
【问题描述】:

我正在使用 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 查找的正确方法?

【问题讨论】:

    标签: java spring spring-mvc mocking jndi


    【解决方案1】:

    您可能想查看 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之前创建。

    干杯,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      相关资源
      最近更新 更多