一个优秀的工程中一定少不了完善的测试模块,在许多的开源项目中如果你想要贡献自己代码,通常也会要求为你的代码编写相应的测试用例。
因此在 Java
中孕育了一众优秀的第三方测试工具库,帮助开发者更高效的编写测试模块,本篇文章就介绍一下如何使用 Junit
与 Mock
框架。
一、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));
}