mock详细教程入门这一篇就够了


pom依赖环境

<!--单元测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<!--mock的静态方法测试-->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>4.3.1</version>
<scope>test</scope>
</dependency>

参数说明

@BeforeEach

测试前

@AfterEach

测试后

MockitoAnnotations.openMocks(this)

一般位于@BeforeEach,使Mock生效

@Spy+@InjectMocks

@Spy 对象调用真实方法

@InjectMocks 用于将@Mock标记注入测试类中

@Mock

模拟真实方法执行

Mockito.when(demo.add(1,2)).thenReturn(3)

打桩,设置测试方法执行结果

Mockito.when(demo.add(1,2)).thenThrow(new RuntimeException())

模拟异常抛出

Assertions.assertEquals(3,demo.add(1,2))

断言,判断测试执行结果

Mock单元测试

方法测试

package org.wo0ow.com;

public class demoTest {

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

}

package org.wo0ow.com;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;

import static org.junit.jupiter.api.Assertions.*;

class demoTestTest {

@Mock
demoTest demoTest;

@BeforeEach
void setUp() {
//System.out.println("测试开始");
MockitoAnnotations.openMocks(this);
}

@Test
void add() {

/*打桩测试*/
//Mockito.when(demoTest.add(1,2)).thenReturn(3);
//Assertions.assertEquals(3,demoTest.add(1,2));

/*模拟抛出异常*/
//Mockito.when(demoTest.add(1,2)).thenThrow(new RuntimeException());
//demoTest.add(1,2);

/*调用真实方法*/
Mockito.when(demoTest.add(1,2)).thenCallRealMethod();
Assertions.assertEquals(3,demoTest.add(1,2));
}

@AfterEach
void after(){
//System.out.println("测试结束");
}
}

静态方法测试

public static int addutil(int a,  int b){
return a + b;
}

public static int addutil(){
return 0;
}
@Test
void addutil(){

MockedStatic demo = Mockito.mockStatic(org.wo0ow.com.demoTest.class);
demo.when(()-> org.wo0ow.com.demoTest.addutil(1,2)).thenReturn(3);
Assertions.assertEquals(3,org.wo0ow.com.demoTest.addutil(1,2));
demo.close();
}

@Test
void addutilNoParams(){
MockedStatic demo = Mockito.mockStatic(org.wo0ow.com.demoTest.class);
demo.when(org.wo0ow.com.demoTest::addutil).thenReturn(0);
Assertions.assertEquals(0,org.wo0ow.com.demoTest.addutil());
demo.close();
}

Service业务测试

class ManmanUserInfoServiceImplTest {

@Mock
private ManmanUserInfoMapper manmanUserInfoMapper;

@Mock
private IManmanUserBalanceService manmanUserBalanceService;

@Spy
@InjectMocks
private ManmanUserInfoServiceImpl manmanUserInfoService;

@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
}

@Test
void insertManmanUserInfo() {

ManmanUserInfo manmanUserInfo = new ManmanUserInfo();
manmanUserInfo.setPhone("AAAXXXXBBBB");

Mockito.when( manmanUserInfoMapper.insertManmanUserInfo(manmanUserInfo) ).thenReturn(1);

ManmanUserBalance manmanUserBalance = new ManmanUserBalance();
Mockito.when( manmanUserBalanceService.insertManmanUserBalance(manmanUserBalance) ).thenReturn(1);

assertEquals(1,manmanUserInfoService.insertManmanUserInfo(manmanUserInfo));

}
}