上面的例子是很理想化的状态,但是在实际的开发中,我们需要经常调用一些依赖特定环境的函数或者调用同事写的代码,而同事仅提供了接口。这个时候就需要利用Mockito来协助我们完成测试。

当然,你可以选择easyMock ,jmock等mock工具

在这里直接引用《PowerMock实战手册》中的例子

待测类:

public class EmployeeService {
private EmployeeDao employeeDao; public EmployeeService(EmployeeDao employeeDao) {
this.employeeDao = employeeDao;
}
}

待测类调用的方法

public class EmployeeDao {
public int getTotal() {
throw new UnsupportedOperationException();
}
}

其中 getTotal 就是一个利用正常办法无法测试的函数。

测试类:

public class EmployeeServiceTest  {
@Mock
private EmployeeDao employeeDao;
EmployeeService employeeService; @BeforeMethod
public void init(){
MockitoAnnotations.initMocks(this);
employeeService = new EmployeeService(employeeDao);
} @Test
public void testGetTotalEmployee() {
PowerMockito.when(employeeDao.getTotal()).thenReturn(10);
int total = employeeService.getTotalEmployee();
assertEquals(10, total);
}
}

@Mock 是Mockito的标记 与MockitoAnnotations.initMocks(this) 配合使用,等效于

EmployeeDao employeeDao = Mockito.mock(EmployeeDao.class)

如果些对象在测试类反复使用的话,前一种写法能节省很多代码

@BeforeMethod 是testNG标记 ,作用是在运行很一个测试方法之前运行此方法

@Test testNG标识,表明此方法是一个测试方法

PowerMockito.when(employeeDao.getTotal()).thenReturn(10);
录制mock的行为,当调用getTotal方法时,返回10
具体请参照:http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html

下面是运行结果:


[TestNG] Running:
C:\Users\changzhz\AppData\Local\Temp\testng-eclipse--599967477\testng-customsuite.xml PASSED: testGetTotalEmployee ===============================================
Default test
Tests run: 1, Failures: 0, Skips: 0
=============================================== ===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
=============================================== [TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@5f205aa: 49 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@424c0bc4: 8 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@2ff5659e: 37 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 1 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@1996cd68: 3 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@27ddd392: 5 ms

用Mockito mock普通的方法的更多相关文章

  1. 用PowerMockito来mock私有方法(转)

    话说我们做的所谓的接口测试真的是不伦不类啊,测的是controller层,那叫接口木??!!可是老大们说写的是接口测试,那就接口吧! 自接手写这个接口测试不久,很多人,包括一个关系比较好的架构师就跟我 ...

  2. mock static方法

    <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mock ...

  3. 无所不能的PowerMock,mock私有方法,静态方法,测试私有方法,final类

    1.为什么要用mock 我的一本书的解释: (1)创建所需的DB数据可能需要很长时间,如:调用别的接口,模拟很多数据 (2)调用第三方API接口,测试很慢, (3)编写满足所有外部依赖的测试可能很复杂 ...

  4. powermockito “mock public 方法内部 Private方法的问题”

    我需要测试的方法是 public 方法: public ResponseResult subscribe(SysSubscription sysSubscription) throws JsonGen ...

  5. [Mockito] Mock List interface

    In this post, we are going to see more functionalities in Mockito. Mock a List interface: @Test publ ...

  6. 用PowerMock mock static方法

    在编写代码时,经常需要调用别人已经写好的工具类,而这些工具提供的方法经常是static方法,在这里,直接贴出<PowerMock实战手册>中的例子 待测试方法: public class ...

  7. 单元测试遇到的Mock重载方法问题

    测试某个异常抛出情况,单元测试输出为验证Logger的一条记录,该异常情况日志记录LogInfo,但是LogInfo中平时都用一个参数,在catch这个异常时调用了两个参数的重载方法,导致一直Mock ...

  8. PowerMock mock私有方法

    import java.util.Random; public class CodeWithPrivateMethod { public void meaningfulPublicApi() { if ...

  9. Mockito 如何 mock 返回值为 void 的方法

    转载:https://unmi.cc/mockito-how-to-mock-void-method/#more-7748 最初接触 Mockito 还思考并尝试过如何用它来 mock 返回值为 vo ...

随机推荐

  1. Hibernate 简介

    其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西, ...

  2. Table样式

    .tb_org th { background-color: #; color: #ffffff; } .tb_org { border-right: 1px solid silver; border ...

  3. 从github获取代码

    以duilib为例: 1 建立一个文件夹,右键 git bash here. 2 git init 3 git clone https://github.com/duilib/duilib.git

  4. 用流来读取文件(getline,istringstream)

    ifstream infile("fileanme"); 原型:getline(istream &infile, string &line); 函数说明:读取文件中 ...

  5. offsetwidth/clientwidth的区别

    clientWidth是对象看到的宽度(不含边线,即border)scrollWidth是对象实际内容的宽度(若无padding,那就是边框之间距离,如有padding,就是左padding和右pad ...

  6. Python正则化学习

  7. ireport5.6+jasperreport6.3开发(二)--web开发的配置

    ireport5.6只能编译出*.jasper的报表包,最终报表需要被输出为一个doc html pdf excel等文件,这时就需要jasperreport6.5的库进行配合了. jasperrep ...

  8. Window通过cmd查看端口占用、相应进程、杀死进程

       在windows下启动程序时候经常出现端口占用, 修改本程序端口是一种解决思路,但是更多时候希望直接杀掉占用端口的程序: 一. 查看所有进程占用的端口 在开始-运行-cmd,输入: netsta ...

  9. thinkPHP 标题

    在控制器中 $this->meta_title='标题'; 在对应模板中 {$meta_title} 可以这样对模板中的变量直接进行赋值

  10. 元素操作(sizing,尺寸获取,设值,偏移算法,坐标算法)

    css3的Sizing Box-sizing是css3的box属性之一,遵循css的boxmodel原理,css中box model是分为两种,第一种是w3c的标准模型,另一种是ie的传统模型,他们相 ...