美文网首页
「测试」Mockito测试系统方法调用次数

「测试」Mockito测试系统方法调用次数

作者: 廖雪青 | 来源:发表于2019-04-17 16:22 被阅读0次
一.前言

  关于这篇文章的起源,是在做一个小练习的时候,要求 TDD。真的是一个很小的练习,没有什么可测试的,那么我就想着要不测试下System.out被调用了多少次吧。

二.代码
public class PrintlnCalled {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        new PrintlnCalled().printArrayElement(arr);
    }

    public void printArrayElement(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.println("第"+ i + "个数:"+ arr[i]);
        }
    }
}
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;

import java.io.PrintStream;
import static org.mockito.Mockito.*;


public class PrintlnCalledTest {

    @Mock
    PrintStream mockedSystemOut;

   // @InjectMocks
    PrintlnCalled printlnCalled = new PrintlnCalled();

    final private PrintStream systemOut = System.out;

    @Before
    public void setUp() throws Exception {
        mockedSystemOut = mock(System.out.getClass());
        //把输出流设为MOCK的对象
        System.setOut(mockedSystemOut);
    }

    @Test
    public void testPrintlnTimes() {
        int[] arr = {1,2,3,4,5};
        printlnCalled.printArrayElement(arr);
        //验证MOCK对象的println()方法被调用的次数,此处用了Argument matchers : anyString() 
        verify(mockedSystemOut, times(5)).println(anyString());
    }

    @After
    public void tearDown() throws Exception {
        //测试结束,恢复输出流的默认值
        System.setOut(systemOut);
    }
}

测试结果符合预期

说明

为什么不用@InjectMocks?
System.outjava中,不需要import就可以使用,所以此处通过System.setOut(mockedSystemOut)来代替了依赖注入,故而不需要在PrintlnCalled类上面用@InjectMocks了。

注意

改变了输出流,在测试结束后,一定要恢复输出流的默认测试,不然会影响正常的输出功能。

相关文章

  • 「测试」Mockito测试系统方法调用次数

    一.前言   关于这篇文章的起源,是在做一个小练习的时候,要求 TDD。真的是一个很小的练习,没有什么可测试的,那...

  • Mockito使用注意事项

    使用包为org.mockito-mockito-all-1.10.19 方法调用次数不对如果只运行一个方法的测试,...

  • 静态方法单元测试

    将mockito-core换成mockito-inline 先创建一个调用了静态方法的待测试类 创建单元测试类 打...

  • Mockito的使用

    Mockito的使用 1,Mockito的介绍 1.1 什么是mock测试? Mock测试就在测试过程中,对于某些...

  • Mockito测试

    Mockito测试 通过Mockito测试,对上述功能进行集成测试,拆解不同的服务,然后Mock一些数据库或者底层...

  • 【原创】单元测试mockito用法

    【原创】单元测试mockito用法

  • Android单元测试之PowerMockito

    在博客Android单元测试之Mockito中,主要介绍了Mockito测试框架和基本使用。在博客结束时,我们提出...

  • 测试桩使用场景

    测试桩定义:负责测试的模块/方法所调用的某个模块或系统,模拟返回值(假的-但符合设计) 场景:Web项目引调用第三...

  • mockito单元测试初体验(一)

    本文主要讲利用mockito框架的单元测试流程,具体的mockito代码部分放在下篇介绍。 1.1 单元测试的目的...

  • Mockito使用介绍

    Mockito是用于写Java的单元测试框架,在单元测试中使用Mockito来创建和模拟(Mock)假的Java对...

网友评论

      本文标题:「测试」Mockito测试系统方法调用次数

      本文链接:https://www.haomeiwen.com/subject/pcpnwqtx.html