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层单元测试相关推荐

  1. 熟读《阿里巴巴java开发手册》(三、单元测试,四、安全规约)

    目录 三.单元测试 四.安全规约 三.单元测试 1. [强制] 好的单元测试必须遵守 AIR 原则. 说明: 单元测试在线上运行时,感觉像空气( AIR)一样并不存在,但在测试质量的保障上,却是非常关 ...

  2. java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题

    往期文章 「Java并发编程」谈谈Java中的内存模型JMM 面试官:说说你知道多少种线程池拒绝策略 为什么不要在MySQL中使用UTF-8编码方式 前言 很多公司都有写单元测试的硬性要求,在提交代码 ...

  3. Java基础学习总结(118)——单元测试的必要性和重要性

    大部分程序员有两个特点:一不愿意写文档和注释,二不愿意写单测.单元测试是黑盒测试的基础,基本的准入测试,既能验证逻辑的准确性,又能给后续的接口重构提供基础.总之就是『单元测试很重要』,在敏捷迭代开发过 ...

  4. java queue使用_使用Java使用Amazon Simple Queue Service

    java queue使用 Amazon Simple Queue Service或SQS是Amazon Webservice堆栈提供的高度可扩展的托管消息队列. Amazon SQS可用于完全解耦系统 ...

  5. 使用Java使用Amazon Simple Queue Service

    Amazon Simple Queue Service或SQS是Amazon Webservice堆栈提供的高度可扩展的托管消息队列. Amazon SQS可用于完全解耦系统中不同组件的操作,这些组件 ...

  6. 单元测试编写_为什么要编写单元测试-测试技巧8

    单元测试编写 我对最近的博客"您应该测试什么"有很多React,有些人出于各种原因与我达成一致,另一些人则认为建议某些类可能不需要单元测试是完全危险的. 已经处理了什么测试,今天的 ...

  7. java spring框架 注解_spring框架之注解的使用

    原标题:spring框架之注解的使用 今天是刘小爱自学Java的第122天. 感谢你的观看,谢谢你. 学习内容安排如下: Spring注解的使用. JavaWeb项目的搭建. Spring的Web集成 ...

  8. [MyBatisPlus]通用Service接口测试通用Service

    通用Service接口 说明: 通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删 除 list 查询集合 page 分页 前缀命 ...

  9. java编程式事务_Spring编程式和声明式事务实例讲解

    Spring事务管理 Spring支持两种方式的事务管理: 编程式事务管理: 通过Transaction Template手动管理事务,实际应用中很少使用, 使用XML配置声明式事务: 推荐使用(代码 ...

最新文章

  1. Conventions and patterns for multi-platform development
  2. RAM测试方法 C语言实现,有哪些常用单片机系统RAM测试方法?基于种子和逐位倒转的RAM故障测试法有什么优点?...
  3. 阿里巴巴为什么要禁止使用存储过程?
  4. pandas - 案例(股票分析)
  5. beego mysql 存储过程_ioioj5
  6. Allegro PCB find里面的筛选 各属性说明如 Clines或者Cline Segs
  7. Api demo源码学习(8)--App/Activity/QuickContactsDemo --获取系统联系人信息
  8. (转)Android属性设置android:noHistory=true
  9. 编程练习赛11B 物品价值(装压dp)
  10. android之去掉空包合并
  11. 笔记本--摄像头驱动--找不到相机--浏览器打开相机失败--未检测到摄像头--剩下的标题我就不想了--太长了
  12. Kotlin 官方参考文档翻译完毕
  13. 同济版《线性代数》引发激烈争议!
  14. javaweb(ssh)体育赛事网上售票系统案例
  15. Delta对冲:实际波动率 VS 隐含波动率
  16. 接口管理工具Rap的安装
  17. TCP 与 UDP 的异同
  18. python飞机大战源码素材包_python(pygame)滑稽大战(类似飞机大战) 教程
  19. BZOJ 1251 序列终结者 Splay
  20. Javase多态(对多态的理解、多态的体现)

热门文章

  1. 面向接口编程经典案例之打印机
  2. 约瑟夫生死游戏c 语言,[源码和文档分享]使用C++实现的约瑟夫生死游戏
  3. linux grep正则表达式,grep中的正则表达式
  4. python 保留两位有效数字
  5. 信用融资:通向成功之路——黄一老师
  6. 【unity实战】制作一个类帝国时代、红警——RTS战略性游戏
  7. 青年教师大讲堂 计算机,课堂展风采交流促提升 ───数学与统计学院开展青年教师教学能力提升大讲堂活动...
  8. 云之海服务器无限试炼指令,感恩有你 《我的世界》感恩节系列活动暖心回馈...
  9. 用友U8未完成开票采购订单查询语句
  10. C++工厂方法模式(Factory Method Pattern)