文档章节

mockito learn one

writeademo
 writeademo
发布于 11/21 19:56
字数 707
阅读 7
收藏 0

mockito 介绍

 

mockito是一个很好用的模拟测试框架,能够让你写出简单优美测试,它不会给你残留的测试,因为它可读而且能够简单的验证错误。

如何使用?

 

 

引入依赖

 

<!-- https://mvnrepository.com/artifact/org.mockito/mockito-all -->

<dependency>

<groupId>org.mockito</groupId>

<artifactId>mockito-all</artifactId>

<version>1.10.19</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.mockito</groupId>

<artifactId>mockito-core</artifactId>

</dependency>

 

/**

* verify some behaviour

*/

@Test

public void mockedList() {

List mockedList = mock(List.class);

mockedList.add("one");

mockedList.clear();

verify(mockedList).add("one");

verify(mockedList).clear();

 

}

 

/**

* stubbing

*/

@Test

public void mockedStubbing() {

LinkedList linkedList = mock(LinkedList.class);

//stubbing

when(linkedList.get(0)).thenReturn("first");

when(linkedList.get(1)).thenThrow(new RuntimeException());

 

System.out.println(linkedList.get(0));

System.out.println(linkedList.get(1));

System.out.println(linkedList.get(999));

verify(linkedList).get(0);

 

}

 

/**

* arguments matchers

*/

@Test

public void mockMatcher() {

List<String> mockList = mock(ArrayList.class);

//build-in anyInt() arguments matchers

when(mockList.get(anyInt())).thenReturn("element");

//todo isVaild 没有找到

// when(mockList.contains(argThat(isValid()))).thenReturn("element");

 

System.out.println(mockList.get(999));

verify(mockList).get(anyInt());

// verify(mockList).add(argThat(someString->someString.length()>5));

//is ok

// verify(mockList).someMethod(anyInt(), anyString(), eq("third argument"));

//is not ok 缺少了matcher

// verify(mockList).someMethod(anyInt(), anyString(), "third argument");

 

}

 

/**

* verifying exact number of invocations /at least x/never

*/

@Test

public void mockTimes() {

List<String> mockList = mock(List.class);

mockList.add("once");

mockList.add("twice");

mockList.add("twice");

mockList.add("third");

mockList.add("three times");

mockList.add("three times");

mockList.add("three times");

verify(mockList).add("once");

verify(mockList, times(1)).add("once");

verify(mockList, times(2)).add("twice");

verify(mockList, times(3)).add("three times");

verify(mockList, never()).add("never happen");

verify(mockList, atLeastOnce()).add("three times");

verify(mockList, atLeast(2)).add("three times");

verify(mockList, atMost(5)).add("three times");

 

}

 

/**

* stubbing void methods with exceptions

* 方法调用的时候抛出异常

*/

@Test

public void mockThrow() {

List mockedList = mock(List.class);

doThrow(new RuntimeException()).when(mockedList).add("a");

mockedList.add("a");

}

 

/**

* verification in order

*/

@Test

public void mockOrder() {

List singleMock = mock(List.class);

singleMock.add("was added first");

singleMock.add("was added second");

InOrder inOrder = inOrder(singleMock);

inOrder.verify(singleMock).add("was added first");

inOrder.verify(singleMock).add("was added second");

List firstMock = mock(List.class);

List secondMock = mock(List.class);

firstMock.add("was called first");

secondMock.add("was called second");

 

InOrder inOrder1 = inOrder(firstMock, secondMock);

 

inOrder1.verify(firstMock).add("was called first");

inOrder1.verify(secondMock).add("was called second");

}

 

/**

* making sure interactions never happened on mock

*/

@Test

public void mockInteractions() {

List mockOne = mock(List.class);

List mockTwo = mock(List.class);

List mockTree = mock(List.class);

mockOne.add("One");

verify(mockOne).add("One");

verify(mockOne, never()).add("two");

verifyZeroInteractions(mockTwo, mockTree);

}

 

/**

* finding redundant invocations

*/

@Test

public void mockRedundant() {

List mockList = mock(List.class);

mockList.add("one");

mockList.add("two");

verify(mockList).add("one");

verifyNoMoreInteractions(mockList);

}

 

 

/**

* stubbing consecutive calls(iterator-style stubbing)

*/

@Test

public void mockSomeMethod() {

List mock = mock(List.class);

when(mock.add("some arg")).thenThrow(new RuntimeException())

.thenReturn(true);

//first call throws runtime exception

mock.add("some arg");

//second call print true

System.out.println(mock.add("some arg"));

// any consecutive call: print foo as well

System.out.println(mock.add("some arg"));

}

 

/**

* stubbing with callbacks

*/

@Test

public void mockCallbacks() {

 

/**

* Cannot mock/spy class java.lang.StringBuilder

Mockito cannot mock/spy following:

- final classes

- anonymous classes

- primitive types

*/

List<String> sb = mock(List.class);

 

when(sb.add(anyString())).thenAnswer(

new Answer() {

@Override

public Object answer(InvocationOnMock invocation) {

Object[] args = invocation.getArguments();

Object mock = invocation.getMock();

return false;

}

}

);

System.out.println(sb.add("foo"));

// doReturn()|doThrow()| doAnswer()|doNothing()|doCallRealMethod() family of methods

 

doThrow(new RuntimeException()).when(sb).add("foo");

 

sb.add("foo");

}

 

 

/**

* spying on real objects

*/

@Test

public void mockspy(){

List list=new LinkedList();

List spy=spy(list);

when(spy.size()).thenReturn(100);

spy.add("one");

spy.add("two");

System.out.println(spy.get(0));

System.out.println(spy.size());

verify(spy).add("one");

verify(spy).add("two");

}

 

@Test

public void mockspy1(){

List list=new LinkedList();

List spy=spy(list);

when(spy.get(0)).thenReturn("foo");

doReturn("foo").when(spy).get(0);

}

 

 

© 著作权归作者所有

共有 人打赏支持
writeademo
粉丝 25
博文 560
码字总数 205528
作品 0
东城
私信 提问
Mockito 简明教程

原文同步至 Mock 测试是单元测试的重要方法之一。本文介绍了基于 Java 语言的 Mock 测试框架 -- Mockito 的使用。 什么是 Mock 测试 Mock 测试就是在测试过程中,对于某些不容易构造(如 Ht...

waylau
2016/02/19
244
2
Kotlin 写 Android 单元测试(三),Mockito mocking 框架的使用

Kotlin 写 Android 单元测试系列: Kotlin 写 Android 单元测试(一),单元测试是什么以及为什么需要 Kotlin 写 Android 单元测试(二),JUnit 4 测试框架和 kotlin.test 库的使用 Kotlin...

JohnnyShieh
2017/12/14
0
0
JAVA单元测试mock框架

JAVA单元测试mock框架 无标题2016-07-17298 阅读 JAVA 一.概述 最近在做代码重构,发现系统中的UT很少,重构没有UT的话,全部得人工测试,逻辑覆盖不一定全部能覆盖到,因此UT还是很有必要存...

无标题
2016/07/17
0
0
5分钟了解Mockito

一、什么是mock测试,什么是mock对象? 先来看看下面这个示例: 从上图可以看出如果我们要对A进行测试,那么就要先把整个依赖树构建出来,也就是BCDE的实例。 一种替代方案就是使用mocks 从图...

闪电
2016/09/25
22
0
Spring Boot 1.4 Test Improve

Testing improvements in Spring Boot 1.4(https://spring.io/blog/2016/04/15/testing-improvements-in-spring-boot-1-4) calls(int))) mock spy BDD (Behavior-driven development)(https......

OrangeJoke
2016/11/20
11
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)

应用场景 之前我们已经通过《Spring Cloud Stream消费失败后的处理策略(一):自动重试》一文介绍了Spring Cloud Stream默认的消息重试功能。本文将介绍RabbitMQ的binder提供的另外一种重试...

程序猿DD
22分钟前
0
0
kiss原则

KISS 原则是用户体验的高层境界,简单地理解这句话,就是要把一个产品做得连白痴都会用,因而也被称为“懒人原则”。换句话说来,”简单就是美“。KISS 原则源于 David Mamet(大卫马梅)的电...

NB-One
24分钟前
6
0
MYSQL事务处理

INNODB 事务里,所有表引擎必须为INNODB,在非实务表上操作,不会警告,不会报错,但没有效果

关元
今天
3
0
cmake 编译脚本

#!/bin/sh test -d build || mkdir -p build cd build cmake .. make

shzwork
今天
2
0
从零开始实现Vue简单的Toast插件

概述: 在前端项目中,有时会需要通知、提示一些信息给用户,尤其是在后台系统中,操作的正确与否,都需要给与用户一些信息。 1. 实例 在Vue组件的methods内,调用如下代码 `this``.$toast({...

前端小攻略
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部