Spring测试框架-JNDI资源

Spring测试框架-JNDI资源,spring,jndi,spring-test,Spring,Jndi,Spring Test,我在玩弄Spring测试框架,但我有一个问题。通常在Tomcat上部署应用程序时 <Resource name="jdbc/sqliteDS" auth="Container" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="x" maxWait="5000" driverClassName="org

我在玩弄Spring测试框架,但我有一个问题。通常在Tomcat上部署应用程序时

<Resource
       name="jdbc/sqliteDS"
       auth="Container"
       type="javax.sql.DataSource"
       maxActive="4"
       maxIdle="2"
       username="x"
       maxWait="5000"
       driverClassName="org.sqlite.JDBC"
       password="x"
       url="jdbc:sqlite:/home/xxx/db.sqlite"/> 

</Context>

在Tomcat context.xml中

<resource-ref>
    <description>sqlite DataSource</description>
    <res-ref-name>jdbc/sqliteDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

sqlite数据源
jdbc/sqliteDS
javax.sql.DataSource
容器
在web.xml和

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:/comp/env/jdbc/sqliteDS" />
</bean>

在data-context.xml中 对于获取数据源,我如何模拟Spring测试框架的JNDI资源,因为现在在初始化过程中,我发现数据源找不到,他是对的


另外,如果不需要编写另一个.xml文件就可以做到这一点,那就太好了。

我刚才不得不处理这个问题,但我没有找到合适的解决方案,而是找到了一个包含另一个xml文件的变通方法:

首先,创建一个定义JNDI信息的Spring配置文件(JNDI.xml):

然后在测试类中,添加以下内容:

    @BeforeClass
    public static void initJndi() throws Exception {
        Initialize.initializeJndi();
    }
因此,当您加载Spring主配置文件时,JNDI资源是可访问的

也许这不是最好的方法,但它确实有效

顺便说一下,拥有一个特定的配置文件似乎是一个好主意,因为您可能不想在最终的数据库上运行单元测试。这样做更多地被认为是集成测试而不是单元测试

希望有帮助


Mouwah

首先,感谢您的回复。关于单元/集成测试,我想为一个类编写一个测试,该类使用Spring容器查找带注释的类等等,所以我需要加载所有上下文,为此我需要数据源
public class Initialize {
    public static void initializeJndi() throws Exception {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jndi.xml");
        SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
        builder.bind("java:comp/env/jdbc/foo", applicationContext.getBean("dataSource"));
        builder.activate();
    }
}
    @BeforeClass
    public static void initJndi() throws Exception {
        Initialize.initializeJndi();
    }