快速JavaEE轻量级框架&公用业务模块 设计&实现 6.1 - DAO测试
2013-11-02 00:00
375 查看
使用unitils的dbunit模块进行测试。
真正的去访问数据库,每次测试之前打开一个事务,插入测试数据,业务操作,断言测试数据,回滚。
其中unitils+dbunit实现了除业务操作之外的所有步骤。
dbunit提供了将xml直接转换为数据库数据的功能。
unitils则进一步封装,提供了@DataSet,@ExpectDataset以及事务管理等功能,可以通过annotation的方式将数据文件导入数据库,也可以通过xml去断言数据,并且支持自动回滚,超级方便。
这里在使用unitils整合dbunit的时候碰到了两个问题,记录一下。关于问题,请分别查看下面两篇文章:
unitils使用@DataSet插入测试数据,测试结束后不能回滚
mysql+unitils用@DataSet,抛NoSuchColumnException
最后,贴上一段标准DAO测试的代码:
真正的去访问数据库,每次测试之前打开一个事务,插入测试数据,业务操作,断言测试数据,回滚。
其中unitils+dbunit实现了除业务操作之外的所有步骤。
dbunit提供了将xml直接转换为数据库数据的功能。
unitils则进一步封装,提供了@DataSet,@ExpectDataset以及事务管理等功能,可以通过annotation的方式将数据文件导入数据库,也可以通过xml去断言数据,并且支持自动回滚,超级方便。
这里在使用unitils整合dbunit的时候碰到了两个问题,记录一下。关于问题,请分别查看下面两篇文章:
unitils使用@DataSet插入测试数据,测试结束后不能回滚
mysql+unitils用@DataSet,抛NoSuchColumnException
最后,贴上一段标准DAO测试的代码:
@DataSet public 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<Role> 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; } }
相关文章推荐
- 快速JavaEE轻量级框架&公用业务模块 设计&实现 4 - DAO设计
- 快速JavaEE轻量级框架&公用业务模块 设计&实现 6.2 - 单元测试
- 快速JavaEE轻量级框架&公用业务模块 设计&实现 6 - 测试框架
- 快速JavaEE轻量级框架&公用业务模块 设计&实现 7 - WEB MVC设计
- 快速JavaEE轻量级框架&公用业务模块 设计&实现 5 - RBAC模块设计
- 利用工厂设计模式实现业务层和dao层的解耦
- 模块管理常规功能自定义系统的设计与实现(56--开源开发测试版发布 )
- 使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
- tcp阻断模块实现和测试
- EasyJWeb Tools业务引擎中分页的设计及实现
- c#实现科学计算器 —— 设计篇之词法分析模块设计
- J2EE之DAO设计模式及简单实现
- 简单设计模式实现业务逻辑与流程逻辑的分离
- 使用sqlite3的接口函数完成一个用户登录验证功能模块设计 要封装成独立函数,在独立的main中调用测试;
- 用户注册的邮箱激活模块的设计与实现
- 农业垂直搜索引擎六》搜索与更新模块的设计与实现
- 一个通用的单元测试框架的思考和设计06-实现篇-自动管理测试数据-如何临时关闭数据外键约束
- 实现业务系统中的用户权限管理--设计篇
- 功能测试机设计--测试模块--硬件部分
- 模块管理常规功能自己定义系统的设计与实现(22--第二个模块的增加)