java – 针对HSQLDB测试DAO的Spring/Hibernate/Junit示例

我正在努力实现一个JUnit测试来检查DAO的功能。 (DAO将创建/读取一个基本的对象/表关系)。

我遇到的麻烦是通过使用Spring / Hibernate的内部解决方案完成了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>
Spring 3提供了一个新的jdbc命名空间,其中包括对嵌入式数据库的支持,包括HSQLDB。所以照顾那部分。

我想知道“内部解决方案”是什么。您可以使用注释(JPA或Hibernate注释)来ORM您的域对象,那么为什么需要“内部解决方案”?例如。:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
    p:dataSource-ref="dataSource"
    p:packagesToScan="myapp.model" />

就实现测试而言,使用Spring的TestContext框架。测试可能看起来像这样(再次,我假定下面的Spring 3,虽然它应该在Spring 2.5中工作,只需将@Inject更改为@Autowired):

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({
    "/beans-datasource-it.xml",
    "/beans-dao.xml",
    "/beans-service.xml",
    "/beans-web.xml" })
@Transactional
public class ContactControllerIT {
    @Inject private ContactController controller;

    ... setUp() and tearDown() ...

    @Test
    public void testGetContact() {
        String viewName = controller.getContact(request, 1L, model);

        ... assertions ...
    }
}

例如,您可以将嵌入式数据库放在beans-datasource-it.xml中。 (这里的’it’表示集成测试,文件位于类路径上。)此示例中的控制器位于beans-web.xml中,并将自动连接到ContactController字段中。

这只是一个要做什么的大纲,但希望足够让你开始。

http://stackoverflow.com/questions/2861796/spring-hibernate-junit-example-of-testing-dao-against-hsqldb

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 针对HSQLDB测试DAO的Spring/Hibernate/Junit示例