ฉันกำลังทำงานภายใต้แอปพลิเคชัน 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 สปริงจะค้นหาไม่พบ
ฉันจึงสงสัยว่าฉันจะทำให้การทดสอบทำงานได้อย่างไร