【UT学习】JMockit

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
Part1:Mock
Part2:PowerMock
Part3:Junit


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 一、JMockit
    • 1. JMockito的两种测试方式
    • 2. Mock流程
    • 3. pom依赖
    • 4. 基于JMockito实现代码覆盖率100%
      • 1 Mock 接口
      • 2 Mock 公共类 common class
      • 3. mock common类中的 static方法
      • 4. mock final class --和common类几乎没有啥差别
      • 5.mock final类中的static方法
      • 6. mock static private access method --mock 静态类的静态公有方法、私有方法
      • 7.mockprivate方法
    • 4. 测试样例举例

一、Junit
二、JMockit


一、JMockit

可以参考:https://blog.csdn.net/qq_29698805/article/details/105588023

1. JMockito的两种测试方式

  1. 基于状态
    使用 MockUp 和@Mock 搭配使用实现。会操作到目标代码的内部,类似白盒。

  2. 基于行为
    对Mock目标的行为进行模仿,更像是黑盒。
    使用@Test @Mocked @Injectable @Capturing He Expectations 搭配实现Mock

2. Mock流程

  1. Record:录制期望
  2. Replay:通过调用被测代码,执行测试
  3. Verify:验证,判断返回结果是否正确

3. pom依赖

<!--    jmockit的依赖-->
    <dependency>
        <groupId>org.jmockit</groupId>
        <artifactId>jmockit</artifactId>
        <version>1.8</version>
        <scope>test</scope>
    </dependency>

4. 基于JMockito实现代码覆盖率100%

1 Mock 接口

  1. 定义接口:
package com.zy.learnPowerMockito.learnjmock;

public interface RealHandler {
    void handle(String[] realHandlers);
}

  1. 测试方法:
package com.zy.learnPowerMockito.learnjmock;

import com.sun.org.apache.bcel.internal.generic.MONITORENTER;
import mockit.Mock;
import mockit.MockUp;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;

import static org.junit.Assert.*;

public class RealHandlerTest {

    @Test
    public void handle() {

        MockUp<RealHandler> mockUp = new MockUp<RealHandler>() {

        };

        RealHandler realHandler = new MockUp<RealHandler>() {
            @Mock
            void handle(String[] realHandlers) {
                Assert.assertEquals(1,realHandlers.length);
            }
        }.getMockInstance(); //获取mock打桩的实例对象

        realHandler.handle(new String[]{new String("test")});
    }
}

2 Mock 公共类 common class

public class MyString {
    public String hello(String name) {
        return "hello" + name;
    }
}


public class MyStringTest {

    @Test
    public void hello() {

         new MockUp<MyString>() {
            @Mock
            public String hello(String name) {
                return "hello world";
            }

        }.getMockInstance();
        MyString myString = new MyString();
        Assert.assertEquals("hello world", myString.hello("123"));
    }
}

3. mock common类中的 static方法

    public static String helloStatic(String name) {
        return "hello" + name;
    }
    @Test
    public void helloStatic() {
     new MockUp<MyString>() {
         @Mock
         public String helloStatic(String name) { // 静态方法和非静态再Mock的时候实际是一样的;被mock的方法不能有static关键字
             return "hello world";
         }
     }.getMockInstance();

        Assert.assertEquals("hello world", MyString.helloStatic("test"));
    }

4. mock final class --和common类几乎没有啥差别

5.mock final类中的static方法

public final class MyString {
    public String hello(String name) {
        return "hello" + name;
    }

    public static String helloStatic(String name) {
        return "hello" + name;
    }
}

public class MyStringTest {

    @Test
    public void hello() {

         new MockUp<MyString>() {
            @Mock
            public String hello(String name) {
                return "hello world";
            }

        }.getMockInstance();
         MyString myString = new MyString();

        Assert.assertEquals("hello world", myString.hello("123"));

    }

    @Test
    public void helloStatic() {
     new MockUp<MyString>() {
         @Mock
         public String helloStatic(String name) { // 静态方法和非静态再Mock的时候实际是一样的;被mock的方法不能有static关键字
             return "hello world";
         }
     }.getMockInstance();

        Assert.assertEquals("hello world", MyString.helloStatic("test"));
    }
}

6. mock static private access method --mock 静态类的静态公有方法、私有方法

static class 有一点问题,待调试

7.mockprivate方法

4. 测试样例举例

你可能感兴趣的:(学习)