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));
} }
|