service层测试较简单,目前大多数测试主要是针对public方法进行的。依据测试方法划分,可以分为两种:基于mock的隔离测试和基于dbunit的普通测试。

mock隔离测试

配置pom.xml

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency> <dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
</dependency>

测试原理

隔离测试主要通过@Mock和@InjectMocks两个注解来实现模拟与被模拟。

@Mock:模拟出一个Mock对象,对象是空的,需要指明对象调用什么方法,传入什么参数时,返回什么值

@InjectMocks:依赖@Mock对象的类,也即是被测试的类。@Mock出的对象会被注入到@InjectMocks对象中

测试示例

被测类及方法

import com.agoura.agoura.entity.Members;
import com.agoura.agoura.mapper.MembersMapper;
import com.agoura.agoura.service.MembersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service
public class MembersServiceImpl implements MembersService { @Autowired
private MembersMapper membersMapper; @Override
public Members getMemberById(int id) {
return membersMapper.selectByPrimaryKey(id);
}
}

测试类及方法

import com.agoura.agoura.entity.Members;
import com.agoura.agoura.mapper.MembersMapper;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when; @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:spring-mybatis.xml"})
public class MembersServiceTest { @Mock
private MembersMapper membersMapper; @InjectMocks
private MembersServiceImpl membersService; @Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
} @Test
public void testGetMembersById() {
Members m = new Members(3, "wangwu", 1, 5, "12131232342");
when(membersMapper.selectByPrimaryKey(3)).thenReturn(m);
Members result = membersService.getMemberById(3);
System.out.println(result);
assertEquals(m, result); when(membersMapper.selectByPrimaryKey(Mockito.anyInt())).thenReturn(m);
result = membersService.getMemberById(3);
System.out.println(result);
assertEquals(m, result);
}
}

测试结果

基于dbunit普通测试

unitils-dbunit测试直接模拟底层数据库中存储的内容,对service层进行测试的时候会直接连同DAO层一起测试。具体测试方法可以参考基于dbunit进行mybatis DAO层Excel单元测试

spring service层单元测试的更多相关文章

  1. springboot Service层单元测试

    两个实现类实现同一个Service接口 public interface CustomUrlService { List<ShopMetrics> getShopMetrics(); } ...

  2. SpringBoot—单元测试模板(controller层和service层)

    介绍 概述   在开发过程中,我们经常会一股脑的写各种业务逻辑,经常等全部大功告成的时候,打个jar包放环境里跑跑看看能不能通,殊不知在各个业务方法中已经漏洞百出,修复一个打一个包,再继续修复,这种效 ...

  3. Spring Boot使用单元测试

    一.Service层单元测试: 代码如下: package com.dudu.service;import com.dudu.domain.LearnResource;import org.junit ...

  4. Spring Boot干货系列:(十二)Spring Boot使用单元测试(转)

    前言这次来介绍下Spring Boot中对单元测试的整合使用,本篇会通过以下4点来介绍,基本满足日常需求 Service层单元测试 Controller层单元测试 新断言assertThat使用 单元 ...

  5. Spring Service、Dao进行Junit单元测试

    pring对Controller.Service.Dao进行Junit单元测试总结 ​ 所有用Junit进行单元测试,都需要下面的配置 @RunWith(SpringJUnit4ClassRunner ...

  6. spring aop对service层日志和异常的处理

    1.aop是什么 AOP是Aspect Oriented Programming的缩写,意思是面向切面编程,与OOP(Object Oriented Programming)面向对象编程对等,都是一种 ...

  7. spring事务到底用于service层还是dao层

    Spring事务为业务逻辑进行事务管理,保证业务逻辑上数据的原子性. 事务得根据项目性质来细分:事务可以设置到三个层面(dao层.service层和web层). 第一:web层事务,这一般是针对那些安 ...

  8. Spring的Service层与Dao层解析

    本文转载于网络,觉得写得很透彻. dao完成连接数据库修改删除添加等的实现细节,例如sql语句是怎么写的,怎么把对象放入数据库的.service层是面向功能的,一个个功能模块比如说银行登记并完成一次存 ...

  9. 学习MVC之租房网站(四)-实现Service层并进行单元测试

    在上一篇<学习MVC之租房网站(三)-编写Eneity类并创建数据库>中,记录了编写Eneity类并采用CodeFirst的方式创建数据库的过程,接下来就到了Service层的实现了,并且 ...

随机推荐

  1. spring+mybatis事务不起作用的原因

    一.场景再现 @Override @Transactional public void updateById(String userId,String username) throws Excepti ...

  2. jsp的开发模式

    JSP 存在两种 开发模式1.Model1 : JSP + JavaBean * 不适合开发业务逻辑特别复杂web应用 ----- 业务逻辑复杂,控制代码多,而在jsp中编写控制代码,十分不便 *JS ...

  3. 数字图像处理(MATLAB版)学习笔记(2)——第2章 灰度变换与空间滤波

    0.小叙闲言 1.本章整体结构 2.书中例子 例2.1 主要是使用函数imadjust,来熟悉一下灰度处理,体验一把 >> imread('myimage.jpg'); >> ...

  4. java中GUI的awt和Swing的知识点

    刚刚学习了java的GUI,写了几个程序,基本熟悉了awt和Swing,下面和大家分享一下知识点 1.JFrame的层次结构 参考:http://tieba.baidu.com/p/200421612 ...

  5. 通过VMware安装Linux操作系统

    1.安装好vmvare,下载好Linux,本文采用redhat 6.5  (下载linux可参考http://www.linuxidc.com/Linux/2007-09/7399.htm) 2.选择 ...

  6. meta 整理

    < meta > 元素 概要 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 we ...

  7. 使用live555 在linux下搭建 rtsp server

    系统环境 Debian 7 x64  / centos 7 x64  都可以 首先去下载源码 http://www.live555.com/liveMedia/public/live555-lates ...

  8. ABAP 7.4 新语法-内嵌生命和内表操作

    1.内嵌声明 2.内表操作 3.opensql ************************************************************************ 1. ...

  9. 初学T4模板

    1.T4模板语法 <#@ template language="C#v3.5" hostSpecific="true" debug="true& ...

  10. JAVA 继承中的this和super

    学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云.只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键 ...