java单元测试service时候_spring service层单元测试
service层测试较简单,目前大多数测试主要是针对public方法进行的。依据测试方法划分,可以分为两种:基于mock的隔离测试和基于dbunit的普通测试。
mock隔离测试
配置pom.xml
junit
junit
4.12
org.mockito
mockito-all
1.10.19
测试原理
隔离测试主要通过@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单元测试
java单元测试service时候_spring service层单元测试相关推荐
- 熟读《阿里巴巴java开发手册》(三、单元测试,四、安全规约)
目录 三.单元测试 四.安全规约 三.单元测试 1. [强制] 好的单元测试必须遵守 AIR 原则. 说明: 单元测试在线上运行时,感觉像空气( AIR)一样并不存在,但在测试质量的保障上,却是非常关 ...
- java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题
往期文章 「Java并发编程」谈谈Java中的内存模型JMM 面试官:说说你知道多少种线程池拒绝策略 为什么不要在MySQL中使用UTF-8编码方式 前言 很多公司都有写单元测试的硬性要求,在提交代码 ...
- Java基础学习总结(118)——单元测试的必要性和重要性
大部分程序员有两个特点:一不愿意写文档和注释,二不愿意写单测.单元测试是黑盒测试的基础,基本的准入测试,既能验证逻辑的准确性,又能给后续的接口重构提供基础.总之就是『单元测试很重要』,在敏捷迭代开发过 ...
- java queue使用_使用Java使用Amazon Simple Queue Service
java queue使用 Amazon Simple Queue Service或SQS是Amazon Webservice堆栈提供的高度可扩展的托管消息队列. Amazon SQS可用于完全解耦系统 ...
- 使用Java使用Amazon Simple Queue Service
Amazon Simple Queue Service或SQS是Amazon Webservice堆栈提供的高度可扩展的托管消息队列. Amazon SQS可用于完全解耦系统中不同组件的操作,这些组件 ...
- 单元测试编写_为什么要编写单元测试-测试技巧8
单元测试编写 我对最近的博客"您应该测试什么"有很多React,有些人出于各种原因与我达成一致,另一些人则认为建议某些类可能不需要单元测试是完全危险的. 已经处理了什么测试,今天的 ...
- java spring框架 注解_spring框架之注解的使用
原标题:spring框架之注解的使用 今天是刘小爱自学Java的第122天. 感谢你的观看,谢谢你. 学习内容安排如下: Spring注解的使用. JavaWeb项目的搭建. Spring的Web集成 ...
- [MyBatisPlus]通用Service接口测试通用Service
通用Service接口 说明: 通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删 除 list 查询集合 page 分页 前缀命 ...
- java编程式事务_Spring编程式和声明式事务实例讲解
Spring事务管理 Spring支持两种方式的事务管理: 编程式事务管理: 通过Transaction Template手动管理事务,实际应用中很少使用, 使用XML配置声明式事务: 推荐使用(代码 ...
最新文章
- Conventions and patterns for multi-platform development
- RAM测试方法 C语言实现,有哪些常用单片机系统RAM测试方法?基于种子和逐位倒转的RAM故障测试法有什么优点?...
- 阿里巴巴为什么要禁止使用存储过程?
- pandas - 案例(股票分析)
- beego mysql 存储过程_ioioj5
- Allegro PCB find里面的筛选 各属性说明如 Clines或者Cline Segs
- Api demo源码学习(8)--App/Activity/QuickContactsDemo --获取系统联系人信息
- (转)Android属性设置android:noHistory=true
- 编程练习赛11B 物品价值(装压dp)
- android之去掉空包合并
- 笔记本--摄像头驱动--找不到相机--浏览器打开相机失败--未检测到摄像头--剩下的标题我就不想了--太长了
- Kotlin 官方参考文档翻译完毕
- 同济版《线性代数》引发激烈争议!
- javaweb(ssh)体育赛事网上售票系统案例
- Delta对冲:实际波动率 VS 隐含波动率
- 接口管理工具Rap的安装
- TCP 与 UDP 的异同
- python飞机大战源码素材包_python(pygame)滑稽大战(类似飞机大战) 教程
- BZOJ 1251 序列终结者 Splay
- Javase多态(对多态的理解、多态的体现)
热门文章
- 面向接口编程经典案例之打印机
- 约瑟夫生死游戏c 语言,[源码和文档分享]使用C++实现的约瑟夫生死游戏
- linux grep正则表达式,grep中的正则表达式
- python 保留两位有效数字
- 信用融资:通向成功之路——黄一老师
- 【unity实战】制作一个类帝国时代、红警——RTS战略性游戏
- 青年教师大讲堂 计算机,课堂展风采交流促提升 ───数学与统计学院开展青年教师教学能力提升大讲堂活动...
- 云之海服务器无限试炼指令,感恩有你 《我的世界》感恩节系列活动暖心回馈...
- 用友U8未完成开票采购订单查询语句
- C++工厂方法模式(Factory Method Pattern)