我正在尝试实现一个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 class ExampleDaoTest extends AbstractTransactionalJUnit4SpringContextTests { @Resource(name = " SessionFactory ") private SessionFactory exampleSessionFactory;@Resource(name = " ExampleDao ") private exampleDao exampleDao;
applicationContext.xml
exampleDao:发布于 2010-05-19 12:39:23
Spring3提供了一个新的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框架。一个测试可以是这样的(同样我假设下面是Spring3,不过它应该可以在Spring2.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
字段中。
这只是一个要做什么的大纲,但希望它足以让您开始。
发布于 2010-05-19 12:22:17
See here。它假定maven2是构建工具,但您可以轻松地使用任何工具。
发布于 2011-05-22 21:19:36
我最近在我的一些代码中使用Hibernate、Spring和HSQLDB实现了一个类似的解决方案。
值得注意的是,AbstractTransactionalJUnit4SpringContextTests
现在已经被弃用了--但它仍然是非常直接的测试--我在这里介绍了大部分细节:http://automateddeveloper.blogspot.com/2011/05/hibernate-spring-testing-dao-layer-with.html
https://stackoverflow.com/questions/2861796
复制相似问题