我正在尝试实施JUnit测试以检查DAO的功能。 (DAO将创建/读取一个基本的对象/表关系)。Spring/Hibernate/Junit测试DAO对HSQLDB的示例
时遇到的问题是正在通过使用弹簧一个内部溶液完成DAO的持久性(对于非测试代码)/休眠,这消除了通常*.hbm.xml
模板最例子我已经找到包含。
正因为如此,我遇到一些麻烦了解如何设置的JUnit测试实现DAO创建/读取(只是非常基本的功能)到内存HSQLDB。我找到了一些例子,但是使用内部持久性意味着我无法扩展一些示例显示的类(我似乎无法正确获得application-context.xml的设置)。
任何人都可以推荐任何项目/例子,我可以看看(或任何文档),以进一步了解实现此测试功能的最佳方式?我觉得这应该非常简单,但我仍然遇到执行我发现的例子的问题。
编辑:
这里是我的可读性更好的解决方案,任何人谁需要一个手收拾东西准备:
我
TestClass
:@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:applicationContextTest-Example.xml") @Transactional public class ExampleDaoTest extends AbstractTransactionalJUnit4SpringContextTests { @Resource(name = "sessionFactory") private SessionFactory exampleSessionFactory; @Resource(name = "exampleDao") private ExampleDao exampleDao;
我
applicationContext.xml
文件:<!-- List of Daos to be tested --> <bean id="exampleDao" class="org.myExample.ExampleDao"/> <!-- Datasource --> <bean id="example_dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:hsqldb:mem:ExampleTest"/> <property name="username" value="sa"/> <property name="password" value=""/> </bean> <!-- Session Factory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="example_dataSource"/> <property name="annotatedClasses"> <list> <value>org.myExample.ExampleClass</value> </list> </property> <property name="hibernateProperties"> .... left to user to choose properties </property> </bean>
一些额外的信息:我不是太与configur经历Spring/Hibernate,我已经在之前的项目中配置过它们。 我目前的项目是一个混杂的配置,我无法弄清楚我提到的“内部”类如何获得它的会话工厂。所有DAO扩展它(一个抽象类),并且内部是一个抽象声明: public abstract SessionFactory getSessionFactory(); 我找不出“getSessionFactory()”方法来自哪里。我认为它必须由Spring以某种方式注入,但我找不到任何配置文件。 – 2010-05-19 05:04:15
谢谢你们,你们都很有帮助。 对于那些未来的人: 我将我的applicationContext-Test.xml文件包含到我的单元测试中(通过@ContextConfiguration作为Willie指定的),其中我将HSQLDB数据源,会话工厂,事务管理器和Daos定义为bean 。我的测试类的注释为:@RunWith(SpringJUnit4ClassRunner.class), @ContextConfiguration(locations =“your appContext.xml”) @Transactional,我的会话工厂&dao注释为资源(来自.xml defs):@资源(名称=“sessionFactory”) –
2010-05-19 22:27:34