Rya*_* P. 17 java junit spring hibernate hsqldb
我正在尝试实现一个JUnit测试来检查DAO的功能.(DAO将创建/读取基本对象/表关系).
我遇到的麻烦是DAO的持久性(对于非测试代码)是通过使用Spring/Hibernate的内部解决方案完成的,这消除了*.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;
Run Code Online (Sandbox Code Playgroud)我的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>
Run Code Online (Sandbox Code Playgroud)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" />
Run Code Online (Sandbox Code Playgroud)
就实现测试而言,使用Spring的TestContext Framework.测试可能看起来像这样(我再次假设下面是Spring 3,尽管只需将@Inject更改为@Autowired就可以在Spring 2.5中使用):
@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 ...
}
}
Run Code Online (Sandbox Code Playgroud)
例如,你将嵌入式数据库放在里面beans-datasource-it.xml.('它'在这里代表集成测试,文件在类路径上.)此示例中的控制器存在beans-web.xml,并将自动连接到该ContactController字段中.
这只是一个如何做的概述,但希望它足以让你开始.
| 归档时间: |
|
| 查看次数: |
40855 次 |
| 最近记录: |