怎么mockito方法的内部对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么mockito方法的内部对象相关的知识,希望对你有一定的参考价值。

怎么mockito方法的内部对象?Mockito是一个针对Java的mocking框架。它与EasyMock和jMock很相似,但是通过在执行后校验什么已经被调用,它消除了对期望行为(expectations)的需要。其它的mocking库需要你在执行前记录期望行为(expectations),而这导致了丑陋的初始化代码。下文为转载,但原文有问题,错误的地方特地标红了

Introduction
Code in which new objects are created can be difficult to test. There are a number of patterns for doing this; two of them are discussed here. Both of these patterns may require rearranging your code a little, to make it more testable. Writing code that's easily testable is a good thing to be doing, regardless of which mocking framework you end up using.

Details
Pattern 1 involves factoring uses of new into one-line methods, then using a Mockito spy. This is the simpler of the two patterns. Pattern 2 involves factoring uses of new into a separate class and injecting it. It's a little more work, but it can be more powerful. The new calls that you want to factor out (using either pattern) are those where an object is created, that you are likely to want to mock. It is recommended that you use one or other of these patterns, whenever you find yourself writing new, on a class that's in your code base (as opposed to a JDK class or a class from a third party library).
参考技术A 写测试用例时,如果只关注输入、输出或是否被调用,建议使用Mock框架

Mock框架在处理”黑洞“接口,有奇效

本文简单分享下Mockito框架的使用

能使用Mock的框架有EasyMock,Mockito,PowerMock、JMock等

本系统就只分享Mockito相关的

触类旁通嘛,掌握了Mockito其它就没必要了解其它了,如果想了解,也会很快上手

不费话了,先来个不使用Mock框架的例子

Code:

package tdd.mockito;

import org.junit.Test;

import java.util.ArrayList;

import java.util.List;

import static org.hamcrest.MatcherAssert.assertThat;

import static org.hamcrest.Matchers.is;

/**

* Created by MyWorld on 2016/3/27.

*/

public class MockitoDemo

@Test

public void testListWithActualValue()

List<String> list = new ArrayList<String>();

String listValue0 = "value1";

list.add(listValue0);

assertThat(list.get(0), is(listValue0));





执行下看看结果
是绿条与预期一致OK
使用Mockito框架应该怎么写呢

再写个测试用例

Code:

@Test

public void testListWithMockito()

String listValue0 = "value1";

List list = Mockito.mock(List.class);

when(list.get(0)).thenReturn(listValue0);

assertThat(list.get(0).toString(), is(listValue0));

简单解释上上面的代码Mockito.mock(List.class);//创建一个List接口的Mock对象,可以理解为是一个模拟对象或者假对象。这个对象的作用就是模拟,List的输入和输出
when(list.get(0)).thenReturn(listValue0);//模拟list对象的输入和输出
当执行list.get(0)方法时,返回变量listValue0的值
执行下看看是不是绿条
与预期一致
OK

Mockito和PowerMock用法

参考技术A

​ PowerMock是Java开发中的一种Mock框架,用于 单元模块测试 。当你想要测试一个service接口,但service需要经过防火墙访问,防火墙不能为你打开或者你需要认证才能访问。遇到这样情况时,你可以在你能访问的地方使用MockService替代,模拟实现获取数据。

​ PowerMock可以实现完成对 private/static/fina l方法的Mock(模拟),而Mockito可以对普通的方法进行Mock,如:public等。

Demo演示

PowerMock基于Mockito开发,起语法规则与Mockito一致,主要区别在于使用方面,以实现完成对 private/static/fina l等方法(也支持mock的对象是在方法内部new出来的)的Mock(模拟)。具体事例如下:

1、添加依赖

以上是关于怎么mockito方法的内部对象的主要内容,如果未能解决你的问题,请参考以下文章

Mockito和PowerMock用法

Mockito:验证来自内部匿名类的方法调用

Mockito单元测试保姆级实战(一个java Mock测试框架)

Mockito单元测试保姆级实战(一个java Mock测试框架)

测试类时,使用 Junit 和 Mockito 检查方法内部的工作

使用 mockito 验证对象属性值