use*_*237 5 java junit spring hibernate
我在我的项目中使用Spring和Hibernate的组合,并希望测试DAO方法Save和Delete方法.
daoFoundation是一个通过hibernateSession创建的包装类.
@Override
public String createSubject(Subject subject) {
String subjectId = (String) daoFoundation.save(subject);
return subjectId;
}
Run Code Online (Sandbox Code Playgroud)
这是我在JUnit中使用SpringJunit4ClassRunner编写的内容我在SetupMethod中
创建了主题对象.
@Test
public void createSubjectTest(){
subjectDao.createSubject(subject);
assertNotNull(hassSubjectSelection.getId());
}
Run Code Online (Sandbox Code Playgroud)
这是否足够,还是我需要在我的测试类中另外编写任何内容?
最简单的方法是导入Spring应用程序上下文,在要测试的DAO中自动装配,然后将测试方法或整个类标记为@Transactional.这将创建一个Hibernate会话,运行您的测试,然后自动回滚事务,这样您就不会通过测试影响数据库状态.
看看如何在这里使用Spring运行单元测试.您可以使用@ContextConfiguration注释使Spring创建整个应用程序上下文.因此,如果使用调用的XML文件创建数据库,database-servlet.xml则需要进行注释
@ContextConfiguration(locations={"classpath:/database-servlet.xml"})
public class Test()
您可以使用注释@RunWith(SpringJUnit4ClassRunner.class)将Spring TestContext Framework的功能与单元测试结合使用.这允许您执行诸如声明应该抛出的预期异常,运行定时测试,重复测试运行X次以及一堆其他很酷的东西.
基本上为了使这个工作,您的测试类应该类似于以下内容:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={YOUR APP CONTEXT FILES HERE AS A COMMA SEPARATED LIST})
public class Test(){
@Autowired
private YourDAO yourDAO;
@Test
@Transactional
public void testSave(){
//Test save method here. Any database changes made here will be
//automatically rolled back when the test finishes.
}
Run Code Online (Sandbox Code Playgroud)
让我知道这是否有效.
测试 dao 层的最佳方法是使用 spring jdbctemplate 将数据写入数据库,测试 get 和 delete 方法。然后在@after删除你写的记录。然后使用 hibernate 写入数据库并使用 jdbctemplate 读回它们。然后删除您的测试行。除此之外,您真正要做的就是测试休眠的缓存。
| 归档时间: |
|
| 查看次数: |
13938 次 |
| 最近记录: |