zoukankan      html  css  js  c++  java
  • PowerMock学习(十)之Mock spy的使用

    前言

    回顾下之前学过的内容,会发现一点,如果在mock后不写when和thenReturn去指定,即便是mock调用任何方法,什么也不会做,也看不到什么效果。

    划重点的时候来了,本身mock出来的对象是假的,再调用它的方法,一直都在“造假”。总结来说,就是一切都是假的,应了光良老师的那首歌,“童话里都是骗人的”。

    模拟场景

    service中有一个写数据到文件的方法

    service层

    具体代码如下:

    package com.rongrong.powermock.spies;
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    
    /**
     * @description:
     * @author rongrong
     * @version 1.0
     * @date 2019/12/4 22:45
     */
    public class FileService {
    
        /**
         * 写入文件及数据操
         * @param text
         */
        public void writeData(String text){
            BufferedWriter bw = null;
            try {
                bw=new BufferedWriter(new FileWriter(System.getProperty("user.dir")+"/ronngrong.txt"));
                bw.write(text);
                bw.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(bw!=null){
                    try {
                        bw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    为了模拟调用方法后,啥也没没做这个现象,使用之前学过的方法,这里我们不指定返回值(不加when和thenReturn),即人为干预

    复现代码

    使用之前学过的方法测试,具体示例代码如下:

        @Test
        public void testFileService(){
            FileService fileService = PowerMockito.mock(FileService.class);
            fileService.writeData("hellow,rongrong!!");
        }

    运行结果如下图,并没有新文件生成,更别说写入内容了

    使用powerMock进行测试

    采用 spy 的方式 mock一个对象,然后再调用其中的某个方法,它就会根据真实class 的所提供的方法来调用,具体示例代码如下:
     @Test
        public void testFileServiceWithSpy(){
            FileService fileService = PowerMockito.spy(new FileService());
            File file = new File(System.getProperty("user.dir") + "/ronngrong.txt");
            fileService.writeData("hellow,RongRong!!");
            assertTrue(file.exists());
        }

     直接运行这个测试用例,你会发现在项目根目录下生成了一个新文件,并且里面写入我们预期设定的内容,运行结果如下图:

     再来一看,最起码我们运行能看到效果,即我知道调用方法后干了些什么!!

  • 相关阅读:
    用三张图宏观把握数据库
    MySQL数据库安装与配置详解(图文)
    如何彻底的删除MySQL数据库(图文教程)
    几个常用网络/服务器监控开源软件
    tomcat服务器虚拟目录的映射方式
    手动开发动态资源之servlet初步
    软件项目开发没规划好就注定会失败
    在系统设计中,如何控制层次的问题
    软件系统架构中的分层思想
    鸟哥谈PHP的架构与未来发展
  • 原文地址:https://www.cnblogs.com/longronglang/p/11986572.html
Copyright © 2011-2022 走看看