zoukankan      html  css  js  c++  java
  • Mockito (二十二)

    Mockito 使用 PowerMock 让 Mockito 支持静态方法

    PowerMock 是一个增强库,用来增加 Mockito 、EasyMock 等测试库的功能。

    Mockito 默认是不支持静态方法

    比如我们在 ExampleService 类中定义静态方法 add:

    public class ExampleService {
    
            public static int add(int a, int b) {
                return a+b;
            }
    
        }

    尝试给静态方法打桩,会报错:

    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.mockito.Mock;
    import org.mockito.junit.MockitoJUnitRunner;
    
    import static org.mockito.Mockito.*;
    
    @RunWith(MockitoJUnitRunner.class)
    public class MockitoDemo {
    
        @Test
        public void test() {
    
            // 会报错
            when(ExampleService.add(1, 2)).thenReturn(100);
    
        }
    
    }

    可以用 Powermock 弥补 Mockito 缺失的静态方法 mock 功能

    在 build.gradle 中配置以下依赖:

    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.12'
        testCompile group: 'org.mockito', name: 'mockito-core', version: '2.25.1'
    
        // PowerMock 相关依赖
        testCompile group: 'org.powermock', name: 'powermock-core', version: '2.0.0'
        testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.0'
        testCompile group: 'org.powermock', name: 'powermock-api-mockito2', version: '2.0.0'
    }

    示例:

    import org.junit.Assert;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.powermock.api.mockito.PowerMockito;
    import org.powermock.core.classloader.annotations.PrepareForTest;
    import org.powermock.modules.junit4.PowerMockRunner;
    
    import static org.mockito.Mockito.*;
    
    @RunWith(PowerMockRunner.class)     // 这是必须的
    @PrepareForTest(ExampleService.class)  // 声明要处理 ExampleService
    public class MockitoDemo {
        @Test
        public void test() {
    
            PowerMockito.mockStatic(ExampleService.class);  // 这也是必须的
    
            when(ExampleService.add(1, 2)).thenReturn(100);
    
            Assert.assertEquals(100, ExampleService.add(1, 2));
            Assert.assertEquals(0, ExampleService.add(2, 2));
    
        }
    }

    PowerMockRunner 支持 Mockito 的 @Mock 等注解

    上面我们用了 PowerMockRunner ,MockitoJUnitRunner 就不能用了。但不要担心, @Mock 等注解还能用。

    import org.junit.Assert;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.mockito.Mock;
    import org.powermock.modules.junit4.PowerMockRunner;
    
    import java.util.Random;
    
    import static org.mockito.Mockito.*;
    
    @RunWith(PowerMockRunner.class)
    public class MockitoDemo {
    
        @Mock
        private Random random;
    
        @Test
        public void test() {
    
            when(random.nextInt()).thenReturn(1);
            Assert.assertEquals(1,  random.nextInt());
    
        }
    }

    转载:https://www.letianbiji.com/java-mockito/mockito-powermock-static.html

    带着疑问去思考,然后串联,进而归纳总结,不断追问自己,进行自我辩证,像侦查嫌疑案件一样看待技术问题,漆黑的街道,你我一起寻找线索,你就是技术界大侦探福尔摩斯
  • 相关阅读:
    《团队-Android手机便签-项目进度》
    《结对-结对编项目作业名称-测试过程》
    《结对-结对编项目作业名称-开发过程》
    ios auto layout demystified (二)
    ios auto layout demystified (一)
    电子书下载地址
    轻应用、Web app 、Native app三者区别关系是什么?
    ios录制测试
    Understanding apps: mobile, native or responsive
    iOS开发工具——网络封包分析工具Charles
  • 原文地址:https://www.cnblogs.com/cainiao-Shun666/p/14806669.html
Copyright © 2011-2022 走看看