Junit与Mock测试介绍


一个优秀的工程中一定少不了完善的测试模块,在许多的开源项目中如果你想要贡献自己代码,通常也会要求为你的代码编写相应的测试用例。

因此在 Java 中孕育了一众优秀的第三方测试工具库,帮助开发者更高效的编写测试模块,本篇文章就介绍一下如何使用 JunitMock 框架。

一、JUnit

JUnit 是一个 Java 语言的单元测试框架,是当下最为流行的测试框架之一。 JUnit 有它自己的扩展生态圈,多数 Java 的开发环境都已经集成了 JUnit 作为单元测试的工具。

总所周知一个 Java 类只能拥有一个 main 程序入口,对于程序而言这是再正常不过的,但对于编写测试用例是十分不友好的。

假如我需要单独测试多个方法的能否按照预期执行,在未使用 JUnit 之前我需要新建多个类在其 main 函数中编写主体测试内容。但在 JUint 中通过 @Test 注解即可实现在同个类中单独运行多个方法块。

废话少说下面就介绍一下如何使用 JUnit 。

1. 依赖导入

首先在工程中导入 JUnit 相应的 Maven 依赖。

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
</dependency>

2. 初始化

(1) @Before

通过 @Before 注解的代码块将在测试块代码运行前执行,常用于初始化资源。

@Before
public void Init() {
    System.out.println("在测试块代码之前执行。")
}
(2) @After

通过 @After 注解的代码块将在测试块代码运行后执行,常用于验证或销毁资源。

@After
public void Init() {
    System.out.println("在测试块代码之后执行。")
}

3. 基本使用

JUnit 测试块代码标注同上,在方法上添加 @Test 注解,即可执行方法块内容。

在一个类中我们可以同时定义多个测试块,更高效的是实现测试用例编写。

public class MyTest {
    @Test
    public void demo1() {
        System.out.println("This is demo-1.")
    }

    @Test
    public void demo2() {
        System.out.println("This is demo-2.")
    }
}

二、Mock

Mock 框架同样是当下流行的测试框架之一,其可以生成模拟数据或流程场景,配合 JUnit 可快速实现测试用例编写。

下面就详细介绍一下如何使用 Mock 编写测试用例。

1. 依赖导入

同样在工程中导入 Mock 相应的 Maven 依赖。

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-inline</artifactId>
    <version>4.8.1</version>
</dependency>

2. 初始化

通过 Mockito.mock() 即可初始化测试对象。

public void init() {
    // 创建 Mock 对象,并指定 name
    User user = Mockito.mock(User.class, "userMock");

     // 创建 Mock 对象,参数可以是类或者接口
    List<Integer> list1 = Mockito.mock(List.class);
}

3. 基本使用

(1) when().thenReturn()

即当执行某操作时用于指定其返回值。

public void demo() {
    // 创建 Mock 对象
    List<String> list = Mockito.mock(List.class);
    // 设置方法的预期返回值
    Mockito.when(list.get(0)).thenReturn("ibudai");
    // 打印 ibudai
    System.out.println(list.get(0));
}
(2) when().thenThrow()

即当执行某操作时用于指定抛出的异常。

public void demo() {
    // 创建 Mock 对象
    List<String> list = Mockito.mock(List.class);
    // 设置方法的预期返回值
    Mockito.when(list.get(0)).thenThrow(new IllegalArgumentException());
    // 抛出 IllegalArgumentException 异常
    System.out.println(list.get(0));
}
(3) verify()

用于验证某一操作是否被程序执行,若未被执行则报错:Wanted but not invoked

public void demo() {
    // 创建 Mock 对象
    List<String> list = Mockito.mock(List.class);
    // 设置预期返回值
    Mockito.when(list.get(0)).thenReturn("ibudai");
    list.get(0);
    // 验证方法调用
    System.out.println(Mockito.verify(list).get(0));
}

文章作者: 烽火戏诸诸诸侯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 烽火戏诸诸诸侯 !
  目录