Mockito实例-Junit & Mockito

前言

前几篇对Mockito的概念及其方法进行了介绍,本篇则提供了一个实例供大家练习,在我们工作中一般都是讲Junit与Mockito相结合一起使用,非常简便。

正题

准备工作-引入Mockito与Junit

我们现在工作中的项目一般都是Maven项目,当然我们公司也不例外,所以前期准备就是先在pom.xml中引入这两个jar包。

<dependencies>
<dependency>
     <groupId>org.mockito</groupId>
     <artifactId>mockito-all</artifactId>
     <version>1.9.5</version>
</dependency>
<dependency>
     <artifactId>junit</artifactId>
     <groupId>junit</groupId>
     <version>4.11</version>
</dependency>
</dependencies>

实例代码

package com.demandforce.services.setup;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.test.util.ReflectionTestUtils;

import com.demandforce.dao.BusinessDao;
import com.demandforce.dao.TextMessageTemplateDao;
import com.demandforce.model.Business;
import com.demandforce.model.TextMessageTemplate;

/**
 *
 *   @author    Rebecca Zhao
 *   @date      Jan 6, 2014
 *
 */
@RunWith(MockitoJUnitRunner.class)
public class MsgReminderServiceTest {
 @Mock
 TextMessageTemplateDao textMessageTemplateDao;

 @Mock
 BusinessDao businessDao;

 MsgReminderService msgReminderService;

 @Before
 public void setUpTest() {
  MockitoAnnotations.initMocks(this);
  msgReminderService = Mockito.spy(new MsgReminderServiceImpl());
  msgReminderService.setTextMessageTemplateDao(textMessageTemplateDao);
  msgReminderService.setBusinessDao(businessDao);
 }	

 @Test
 public void testCopyMsgReminderSetting(){
  Long parentBusId = 135001454L;
  String[] busIds = new String[]{"135001455","135001456"};
  Integer type = 204;
  Mockito.doReturn(null).when(textMessageTemplateDao).selectByBusinessCategory(parentBusId, type);
  Mockito.doReturn(null).when(businessDao).selectById(parentBusId);
  List<Business> results = msgReminderService.copyMsgReminderSetting(parentBusId, busIds,type);
  assertTrue(results.isEmpty());	 

  com.demandforce.model.Business b = new com.demandforce.model.Business();
  b.setName("rebecca test");
  b.setCity("SFS");
  b.setState("C");
  TextMessageTemplate tmt = new TextMessageTemplate();
  tmt.setDelivery(1);
  tmt.setBusinessCalendar(true);
  tmt.setBusinessId(parentBusId);
  Mockito.doReturn(tmt).when(textMessageTemplateDao).selectByBusinessCategory(parentBusId, type);
  Mockito.doReturn(b).when(businessDao).selectById(135001455L);
  List<Business> res = msgReminderService.copyMsgReminderSetting(parentBusId, busIds,type);
  assertEquals(1,res.size());
 }
}

原类

package com.demandforce.services.setup;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.ArrayUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.demandforce.dao.BusinessDao;
import com.demandforce.dao.TextMessageTemplateDao;
import com.demandforce.model.Business;
import com.demandforce.model.TextMessageTemplate;

/**
 *
 *   @author    Rebecca Zhao
 *   @date      Jan 3, 2014
 *
 */
@Service
public class MsgReminderServiceImpl implements MsgReminderService {
 static Logger logger = Logger.getLogger(TextMessageSettingServiceImpl.class);

 @Autowired
 TextMessageTemplateDao textMessageTemplateDao;

 @Autowired
 BusinessDao businessDao;

 @Override
 public List<Business> copyMsgReminderSetting(Long parentBusinessId,
   String[] businessIds,Integer type) {
  if(ArrayUtils.isEmpty(businessIds)){
       return null;
  }
  Integer delivery = null;
  Boolean businessCalendar = null;
  List<Business> list = new ArrayList<Business>();
     try{
      Long parentbusId = parentBusinessId;
      TextMessageTemplate tmt = textMessageTemplateDao.selectByBusinessCategory(parentbusId, type);
      if(tmt != null){
       delivery = tmt.getDelivery();
       businessCalendar = tmt.getBusinessCalendar();
      }
      if(delivery != null){
    for(String businessId : businessIds){
     Long busId = Long.valueOf(businessId);
     Business business = businessDao.selectById(busId);
     if(business != null) list.add(business);
    }
      }
     }catch(Exception e){
   logger.error("Error occur while copyTextMessageSetting", e);
  }
  return list;
 }

 public void setTextMessageTemplateDao(TextMessageTemplateDao textMessageTemplateDao) {
  this.textMessageTemplateDao = textMessageTemplateDao;
 }

 public void setBusinessDao(BusinessDao businessDao) {
  this.businessDao = businessDao;
 }
}

小结

上面实例就是简单展示了一个普通的Service的Test类如何编写,如果将其与Dao解耦,实现并向开发。

时间: 2024-07-29 17:45:37

Mockito实例-Junit & Mockito的相关文章

JUnit + Mockito 单元测试(二)

JUnit 是单元测试框架.Mockito 与 JUnit 不同,并不是单元测试框架(这方面 JUnit 已经足够好了),它是用于生成模拟对象或者直接点说,就是"假对象"的工具.两者定位不同,所以一般通常的做法就是联合 JUnit + Mockito 来进行测试. 入门 首先是配置 Mock 对象,看看例子怎么写的. [java] view plain copy List mock = mock( List.class ); when( mock.get(0) ).thenReturn

Junit mockito 测试Controller层方法有Pageable异常

1.问题 在使用MockMVC+Mockito模拟Service层返回的时候,当我们在Controller层中参数方法调用有Pageable对象的时候,我们会发现,我们没办法生成一个Pageable的对象,会报一个Pageable是一个接口的错误.当我们把所有的参数从Pageable接口变成Pageable的实现类PageRequest的时候,所有的方法参数都换成PageRequest,又会出现一个新的错误,且不说PageRequest不能作为参数用于hibernate的分页查询,另一方面,它没

Junit mockito

Mock测试是单元测试的重要方法之一. 1.相关网址 官网:http://mockito.org/ 项目源码:https://github.com/mockito/mockito api:http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html 2.什么是Mock测试 Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获

单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用

转 单元测试及框架简介 --junit.jmock.mockito.powermock的简单使用 2013年08月28日 14:33:06 luvinahlc 阅读数:6413 标签: 测试工具单元测试Junit实例Mockito 更多 个人分类: 单元测试 推荐一个新手学习Junit4的博客地址:http://www.cnblogs.com/eggbucket/archive/2012/02/02/2335697.html        点击打开链接 一.单元测试 单元测试概念: 所谓MT(M

单元测试--Junit和Mockito

说到测试,大家都不会陌生,从我们开始学习编程开始,就知道测试.测试和编程就像两个双胞胎似的,可是,显然我们更钟情于双胞胎中的一个--编程.一些人可能对测试了然于胸,却匮乏于行动,一些人也可能对测试只是闻其名不知其意.下面这篇博文就是给大家在零基础上讲解一下Java中单元测试的使用. ---------------------------什 么 是-----------------------------    首先来说说,究竟什么是单元测试?单元测试是指对软件中的最小可测试单元进行检查和验证.对

使用强大的 Mockito 测试框架来测试你的代码

原文链接 : Unit tests with Mockito - Tutorial 译文出自 : 掘金翻译计划 译者 : edvardhua 校对者: hackerkevin, futureshine 这篇教程介绍了如何使用 Mockito 框架来给软件写测试用例 1. 预备知识 如果需要往下学习,你需要先理解 Junit 框架中的单元测试. 如果你不熟悉 JUnit,请查看下面的教程: www.vogella.com/tutorials/J- 2. 使用mock对象来进行测试 2.1. 单元测

Mock 模拟测试简介及 Mockito 使用入门

Mock 是什么 mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.这个虚拟的对象就是mock对象.mock对象就是真实对象在调试期间的代替品. 简单的看一张图 我们在测试类 A 时,类 A 需要调用类 B 和类 C,而类 B 和类 C 又需要调用其他类如 D.E.F 等,假如类 D.E.F 构造很耗时又或者调用很耗时的话是非常不便于测试的(比如是 DAO 类,每次访问数据库都很耗时).所以我们引入 Mock 对象. 如上图,我们将

Mock以及Mockito的使用

mockito http://www.vogella.com/tutorials/Mockito/article.html 原文地址: http://www.open-open.com/lib/view/open1462177583813.html 在第一篇文章里面 我们提到,返回类型为void方法的单元测试方式,往往是验证里面的某个对象的某个方法是否得到了调用.在那篇文章里面,我举的例子是activity里面的一个login方法: 1 public void login() { 2 Strin

mockito 模拟框架

今天无意中看到mockito  这个框架  一看原来是 模拟测试框架 Mockito尝试用不一样的方法做mocking测试,是简单轻量级能够替代EasyMock的框架.使用简单,测试代码可读性高,丰富的文档包含在javadoc中,直接在IDE中可查看文档,实例,说明.更多信息 参考: http://mockito.googlecode.com/svn/branches/1.6/javadoc/org/mockito/Mockito.html http://www.sizovpoint.com/2