博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速JavaEE轻量级框架&公用业务模块 设计&实现 6.1 - DAO测试
阅读量:6971 次
发布时间:2019-06-27

本文共 3716 字,大约阅读时间需要 12 分钟。

hot3.png

使用unitils的dbunit模块进行测试。

真正的去访问数据库,每次测试之前打开一个事务,插入测试数据,业务操作,断言测试数据,回滚。

其中unitils+dbunit实现了除业务操作之外的所有步骤。

dbunit提供了将xml直接转换为数据库数据的功能。

unitils则进一步封装,提供了@DataSet,@ExpectDataset以及事务管理等功能,可以通过annotation的方式将数据文件导入数据库,也可以通过xml去断言数据,并且支持自动回滚,超级方便。

这里在使用unitils整合dbunit的时候碰到了两个问题,记录一下。关于问题,请分别查看下面两篇文章:

最后,贴上一段标准DAO测试的代码:

@DataSetpublic final class RoleDaoTest extends IntegrateBaseTest {		@SpringBeanByType	private RoleDao roleDao;		@Test	@ExpectedDataSet	public void save() {		Role role = new Role();		role.setName("Test Role");		role.assignPermissions(Lists.newArrayList(RbacPermission.AssignRolePermission));		role.denyPermissions(Lists.newArrayList(RbacPermission.DenyRolePermission));		roleDao.save(role);	}		@Test	@ExpectedDataSet	public void delete() {		roleDao.delete(1L);	}		@Test	public void findOne() {		assertReflectionEquals(roleDao.findOne(1L), createFristRole());		assertReflectionEquals(roleDao.findOne(2L), createSecondRole());		assertReflectionEquals(roleDao.findOne(3L), createThirdRole());	}		@Test	public void findAll() {		Page
roles = roleDao.findAll(new PageRequest(0, 10)); assertThat(roles.getTotalElements(), is(3L)); assertThat(roles.getTotalPages(), is(1)); assertThat(roles.getContent().size(), is(3)); assertReflectionEquals(roles.getContent().get(0), createFristRole()); assertReflectionEquals(roles.getContent().get(1), createSecondRole()); assertReflectionEquals(roles.getContent().get(2), createThirdRole()); roles = roleDao.findAll(new PageRequest(0, 2)); assertThat(roles.getTotalElements(), is(3L)); assertThat(roles.getTotalPages(), is(2)); assertThat(roles.getContent().size(), is(2)); assertReflectionEquals(roles.getContent().get(0), createFristRole()); assertReflectionEquals(roles.getContent().get(1), createSecondRole()); roles = roleDao.findAll(new PageRequest(1, 2, new Sort(new Order(Direction.DESC, "id")))); assertThat(roles.getTotalElements(), is(3L)); assertThat(roles.getTotalPages(), is(2)); assertThat(roles.getContent().size(), is(1)); assertReflectionEquals(roles.getContent().get(0), createFristRole()); } private Role createFristRole() { Role result = new Role(); result.setId(1L); result.setName("Super Admin"); result.setVersion(0L); AssignedRolePermission assignedRolePermission = new AssignedRolePermission(); assignedRolePermission.setId(1L); assignedRolePermission.setPermissionName("com.miraclesea.module.rbac.vo.RbacPermission#AssignRolePermission"); assignedRolePermission.setVersion(0L); assignedRolePermission.setRole(result); result.setAssignedPermissions(Lists.newArrayList(assignedRolePermission)); DeniedRolePermission deniedRolePermission = new DeniedRolePermission(); deniedRolePermission.setId(2L); deniedRolePermission.setPermissionName("com.miraclesea.module.rbac.vo.RbacPermission#DenyRolePermission"); deniedRolePermission.setVersion(0L); deniedRolePermission.setRole(result); result.setDeniedPermissions(Lists.newArrayList(deniedRolePermission)); return result; } private Role createSecondRole() { Role result = new Role(); result.setId(2L); result.setName("Admin"); result.setVersion(0L); AssignedRolePermission assignedRolePermission = new AssignedRolePermission(); assignedRolePermission.setId(3L); assignedRolePermission.setPermissionName("com.miraclesea.module.rbac.vo.RbacPermission#AssignRolePermission"); assignedRolePermission.setVersion(0L); assignedRolePermission.setRole(result); result.setAssignedPermissions(Lists.newArrayList(assignedRolePermission)); return result; } private Role createThirdRole() { Role result = new Role(); result.setId(3L); result.setName("User"); result.setVersion(0L); return result; }}

转载于:https://my.oschina.net/u/719192/blog/173647

你可能感兴趣的文章
x86_64汇编调试程序初步
查看>>
iOS MVVM 参考
查看>>
搜索帮助归纳
查看>>
子窗口与主窗口分开处理
查看>>
git 同步远程分支
查看>>
C语言中可变函数参数变量的实现
查看>>
《深入理解Java虚拟机》阅读笔记
查看>>
不错的silverlight教程
查看>>
软件工程师必须知道的事 —— 如何定义自己的职业路线?
查看>>
同步与异步、阻塞与非阻塞理解
查看>>
vim yank 命令
查看>>
UVA146 POJ1146 ID Codes【全排列】
查看>>
Qt编写OpenMP程序--HelloWorld
查看>>
用函数的地址调用函数 C++ MFC
查看>>
reduce 方法 (Array) (JavaScript)
查看>>
(国内)完美下载Android源码Ubuntu版
查看>>
【二分查找】35. 搜索插入位置
查看>>
SYN flood攻击介绍
查看>>
verilog中初值定义
查看>>
Cobbler学习之二--Cobbler的Web管理和维护
查看>>