Junit结合Spring对Dao层进行单元测试

关于单元测试,上一次就简单的概念和Mock基础做了,参考:http://60.174.249.204:8888/in/modules/article/view.article.php/74

实际开发过程中,写单元测试是非常难的一件事情,其主要原因是代码结构不够好,导致单元测试不好写。特别是Dao层,因为Dao层代码都是与数据库相关的,所以我们在对Dao层代码进行单元测试的时候,不仅仅要考虑我在上篇文章中提到的代码隔离,还要注意单元测试不能带来脏数据。另外,dao层实例依赖spring上下文,我们怎么样来解决这个问题?

看看下面的一个的测试实例:

/**
* @author lisanlai

* Mail: [email protected]

* Blog:http://blog.lisanlai.cn

*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "/META-INF/spring/sellmanager-context.xml",
"/META-INF/spring/dao-context.xml",
"/META-INF/spring/mvc-context.xml" })
//@Transactional
public class SysEmployeeDaoTest {

/**
* 测试deleteEmployee方法 .
* Method Name:deleteEmployee .
* the return type:void
*/
@Test
public void deleteEmployee() {
Employee employee = new Employee();
employee.setEmployeeCode(""+new Date().getTime());
employee.setEmployeeName("lisanlai");
employee.setDelFlag("0");
String empId = sysEmployeeDao.save(employee);
Assert.assertNotNull("新增的员工ID为null",empId);

//把该id对应的员工删除
sysEmployeeDao.deleteEmployee(empId);
//再用该ID去查数据库,如果为空,说明删除方法逻辑正确
Employee emp = sysEmployeeDao.get(empId);
Assert.assertNotNull(emp);
Assert.assertArrayEquals("deleteEmployee方法逻辑不正确,员工没有被删除",
new String[]{"1"}, new String[]{emp.getDelFlag()});
//删除员工对象
sysEmployeeDao.delete(emp);
}

/**
* 测试saveEmployee方法 .
* Method Name:saveEmployee .
* the return type:void
*/
@Test
@Transactional
@Rollback(true)
public void saveEmployee() {
Employee employee = new Employee();
employee.setEmployeeName("lisanlai");
String empCode = ""+new Date().getTime();
employee.setEmployeeCode(empCode);
sysEmployeeDao.saveEmployee(employee);

//通过code查找员工
List emps = sysEmployeeDao.findByNamedParam(
new String[]{"employeeCode"},
new String[]{empCode});
Assert.assertTrue("saveEmployee方法逻辑错误,员工保存失败!", !emps.isEmpty());
}

}

注意类上的三个注解:

//指定测试用例的运行器 这里是指定了Junit4
@RunWith(SpringJUnit4ClassRunner.class)
//指定Spring的配置文件 路径相对classpath而言
@ContextConfiguration({ "/META-INF/spring/sellmanager-context.xml",
"/META-INF/spring/dao-context.xml",
"/META-INF/spring/mvc-context.xml" })
//如果在类上面使用该注解,这样所有的测试方案都会自动的 rollback
//@Transactional

再注意saveEmployee方法上的两个注解:
//这个注解表示使用事务
@Transactional
//这个表示方法执行完以后回滚事务,如果设置为false,则不回滚
@Rollback(true)

时间: 2024-12-09 16:05:52

Junit结合Spring对Dao层进行单元测试的相关文章

spring对dao层的支持(datasource的作用)

本文大多数内容转自“http://www.cnblogs.com/liunanjava/p/4412408.html”感谢原作者 在做一个项目时,持久层并没有使用spring jpa和hibernate结合,而是使用了spring原生的jdbctemplate. 因为spring原声的jdbc template效率更高 二.Spring注入数据源 2.1. DataSource(数据源) 连接数据的方式称为“数据库”.比如JDBC,连接池或者JNDI Spring通过依赖注入方式配置数据源 不同

spring对dao层的支持

Spring提供的DAO(数据访问对象)支持主要的目的是便于以标准的方式使用不同的数据访问技术, 如JDBC,Hibernate或者JDO等.它不仅可以让你方便地在这些持久化技术间切换, 而且让你在编码的时候不用考虑处理各种技术中特定的异常. 为了便于以一种一致的方式使用各种数据访问技术,如JDBC.JDO和Hibernate, Spring提供了一套抽象DAO类供你扩展.这些抽象类提供了一些方法,通过它们你可以 获得与你当前使用的数据访问技术相关的数据源和其他配置信息. Dao支持类: Jdb

Spring Boot微信点餐——实战开发DAO层

0. 修改grade镜像,使用阿里云地址,以便于快速加载依赖 参照大佬博客 =====> 阿里云maven镜像 # 项目目录下的build.gradle repositories { maven {url 'http://maven.aliyun.com/nexus/content/groups/public/'} mavenLocal() mavenCentral() } # 或者找到GRADLE_HOME/init.d/ 或者是 GRADLE_HOME/init.d/ # .gradle目录

dao层单元测试报错CONDITIONS EVALUATION REPORT

0 环境 系统:win10 编辑器:IDEA 1 正文 1.1 起因 在controller层测试 测试url时没问题的 但是我单元测试就报错 1.2 排查 因为controller层 springbootapplication启动项目没问题 说明xml文件是没问题的 可能性很大的就是dao层没映射到 重点排查一下 打算debug的 突然想起来我在springbootapplication文件下添加了mappe包的包扫描 然而dao层的单元测试 没有启动springbootapplication

Java高并发秒杀API之业务分析与DAO层

课程介绍 高并发和秒杀都是当今的热门词汇,如何使用Java框架实现高并发秒杀API是该系列课程要研究的内容.秒杀系列课程分为四门,本门课程是第一门,主要对秒杀业务进行分析设计,以及DAO层的实现.课程中使用了流行的框架组合SpringMVC+Spring+MyBatis,还等什么,赶快来加入吧! 第1章 课程介绍 本章介绍秒杀系统的技术内容,以及系统演示.并介绍不同程度的学员可以学到什么内容. 第2章 梳理所有技术和搭建工程 本章首先介绍秒杀系统所用框架和技术点,然后介绍如何基于maven搭建项

Spring之DAO一

前面博客把bean.aop简单了解了一下,今天主要是了解Spring中DAO层,如果使用传统的JDBC时需要创建连接.打开.执行sql.关闭连接这一系列的步骤,Spring框架对JDBC进行了封装,我们只需使用封装好的JdbcTemplate执行sql语句.主要还是继承了Spring提供的JdbcDaoSupport.下面主要是用来演示怎么使用JdbcDaoSupport. 一.创建Model 这里创建一个User类,作为model. package Cuiyw.Spring.Model; pu

第二章-spring boot springDataJPA快速开发DAO层,junit测试

一.简介 第一章介绍了spring boot简单入门,这一章介绍一下如何通过springDataJPA快速实现DAO层开发. 二.环境 1. jdk1.8 2. springboot 1.5.9.RELEASE 3. apache maven(3.5.0) 4. 开发工具(IntelliJ IDEA ) 三.步骤 1)通过idea file->new project->Spring Initializr 创建项目,选中web->web,sql->JPA.MySQL.       

【j2ee spring】29、巴巴运动网-整合hibernate4+spring4(4)DAO层

巴巴运动网-整合hibernate4+spring4(3)DAO层 1.项目图解 2.首先我们引入相应的jar包 3.我们配置一下数据库中相应的实体对象 ProductType.java /** * 功能:这是产品类别的 * 文件:ProductType.java * 时间:2015年5月12日10:16:21 * 作者:cutter_point */ package com.cutter_point.bean.product; import javax.persistence.Column;

DAO层单元测试编码和问题排查

DAO层单元测试编码和问题排查 SecKillDaoTest .java(注意接口参数使用注解@Parm("parameter")) package org.secKill.dao; import org.junit.Test;import org.junit.runner.RunWith;import org.secKill.entity.SecKill;import org.springframework.test.context.ContextConfiguration;impo