0

我正在一个 spring mvc3 应用程序下工作。

当我想对 Dao 组件进行一些单元测试时,我遇到了一些问题。

这是我在 Eclipse 中的应用程序结构:

application
    build
        classes
    src
        org.....
    res
        jdbc.properties
        log4j.properties
    www
        resources
            css
            js
        WEB-INF
            mybatis
                config.xml
            view
            spring
                servlet-context.xml
                spring-contex.xml
                spring-dao.xml
            web.xml

servlet-context.xml:

<!-- web related config omitted -->
    <import resource="spring-context.xml" />
    <import resource="spring-dao.xml" />

弹簧上下文.xml:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">.......</bean>

<context:property-placeholder location="classpath*:jdbc.properties" />

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="/WEB-INF/mybatis/config.xml" />
</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

spring-dao.xml:

<bean id="postDao" class="com.king.dao.PostDao" />

这是我的 PostDao 课程:

public class PostDao extends SqlSessionDaoSupport{
    public Post query(int id) {
        return getSqlSession().selectOne("com.king.model.PostMapper.selectById", id);
    }
}

上述配置在 servlet 容器中运行良好。

但是,当我想在没有 servlet 环境的情况下测试 PostDao 时,我遇到了一些问题。

我试过这个:

public static main(String[] args){
    ApplicationContext ctx = new ClassPathXmlApplicationContext("E:/application/www/WEB-INF/spring/servlet-context.xml");
    PostDao pd = (PostDao) ctx.getBean("postDao");
    Post p = pd.query(9);
}

然后我得到错误,“mybatis/config.xml”无法创建。

我知道这是由不同的运行环境引起的。

在 servlet 上下文中,spring 会找到“/WEB-INF/mybatis/config.xml”,但是在 java 应用程序中,它找不到它。

所以我想知道如何让我的测试工作?

4

1 回答 1

0

你的意思是单元测试还是集成测试?如果是这样,我建议使用 Spring Test 模块——它允许您定义一个特定的测试上下文,您可以在其中提供相关 bean 的真实或模拟实现。它与 JUnit 很好地集成,并提供了在 Spring 环境中成功运行测试所需的大量脚手架。

于 2012-08-30T07:47:30.330 回答