การตั้งค่าสภาพแวดล้อมการทดสอบแอปพลิเคชัน Spring mvc3

ฉันกำลังทำงานภายใต้แอปพลิเคชัน 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

เซิร์ฟเล็ต-context.xml:

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

สปริง-context.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>

สปริง-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);
    }
}

การกำหนดค่าข้างต้นทำงานได้ดีในคอนเทนเนอร์เซิร์ฟเล็ต

อย่างไรก็ตาม เมื่อฉันต้องการทดสอบ 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" ได้

ฉันรู้ว่าสิ่งนี้เกิดจากสภาพแวดล้อมการทำงานที่แตกต่างกัน

ในบริบทเซิร์ฟเล็ต spring จะค้นหา "/WEB-INF/mybatis/config.xml" แต่เมื่ออยู่ในแอปพลิเคชัน java สปริงจะค้นหาไม่พบ

ฉันจึงสงสัยว่าฉันจะทำให้การทดสอบทำงานได้อย่างไร


person hguser    schedule 30.08.2012    source แหล่งที่มา


คำตอบ (1)


คุณหมายถึงการทดสอบหน่วยหรือบูรณาการ? หากเป็นเช่นนั้น ฉันขอแนะนำให้ใช้โมดูล Spring Test ซึ่งจะช่วยให้คุณกำหนดบริบทการทดสอบเฉพาะที่คุณสามารถจัดเตรียมการใช้งาน bean ที่เกี่ยวข้องจริงหรือจำลองได้ มันทำงานร่วมกับ JUnit ได้ดีและมอบความช่วยเหลือมากมายที่คุณต้องการเพื่อรันการทดสอบภายในสภาพแวดล้อม Spring ได้สำเร็จ

person TrueDub    schedule 30.08.2012