SpringBoot Mockito 依赖注入

SpringBoot Mockito 依赖注入

  • [1 添加依赖](#1 添加依赖)
  • [2 @Mock @MockBean @InjectMocks](#2 @Mock @MockBean @InjectMocks)
  • [3 @ExtendWith(MockitoExtension.class) @RunWith(MockitoJUnitRunner.class)](#3 @ExtendWith(MockitoExtension.class) @RunWith(MockitoJUnitRunner.class))
  • [4 Mockito 单元测试](#4 Mockito 单元测试)
    • [4.1 JunitTestService](#4.1 JunitTestService)
    • [4.2 JunitTestServiceImpl](#4.2 JunitTestServiceImpl)
    • [4.3 TestService](#4.3 TestService)
    • [4.4 TestServiceImpl](#4.4 TestServiceImpl)
    • [4.5 MockTest](#4.5 MockTest)

1 添加依赖

xml 复制代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>

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

2 @Mock @MockBean @InjectMocks

注解 作用
@Mock @Mock 注解用于创建一个模拟对象。它通常与 JUnit 的 @RunWith(MockitoJUnitRunner.class) 注解一起使用。在测试用例运行之前,Mockito 会自动初始化使用 @Mock 注解标注的对象。
@MockBean 注解类似于 @Mock,但它是在 Spring 测试环境中使用的。使用 @MockBean 可以添加一个模拟的 Bean 到 Spring 应用程序上下文中。通常与 @SpringBootTest 或 @WebMvcTest 注解一起使用。
@InjectMocks @InjectMocks 注解用于自动注入模拟对象到被测试对象中。它必须与 @Mock 或 @MockBean 注解一起使用。Mockito 会先初始化所有的模拟对象,然后将它们注入到使用 @InjectMocks 注解标注的被测试对象中。
注解 注入
@InjectMocks 需要使用@Mock标注的类,@MockBean会为空。
@Autowired 需要使用@MockBean标注的类,@Mock会为空。

3 @ExtendWith(MockitoExtension.class) @RunWith(MockitoJUnitRunner.class)

@ExtendWith(MockitoExtension.class) 是 Mockito 框架从 JUnit 5 开始引入的一种新的测试扩展机制。它取代了之前在 JUnit 4 中使用的 @RunWith(MockitoJUnitRunner.class) 注解。

MockitoExtension 是 JUnit 5 提供的一个扩展接口,Mockito 实现了这个接口,使 Mockito 能够集成到 JUnit 5 测试框架中。通过使用 @ExtendWith(MockitoExtension.class) 注解,可以在 JUnit 5 测试中使用 Mockito 的模拟功能。

使用 @ExtendWith(MockitoExtension.class) 注解后,你就可以直接使用 @Mock、@Spy、@Captor 等 Mockito 注解来创建和管理模拟对象,而不需要手动初始化这些模拟对象。同时,也不再需要使用 @RunWith 注解。

4 Mockito 单元测试

4.1 JunitTestService

java 复制代码
package com.xu.test.service;

public interface JunitTestService {

    String test(String a);

}

4.2 JunitTestServiceImpl

java 复制代码
package com.xu.test.service.impl;

import com.xu.test.service.JunitTestService;
import org.springframework.stereotype.Service;

@Service
public class JunitTestServiceImpl implements JunitTestService {

    @Override
    public String test(String a) {
        return a.concat(" Mockito");
    }

}

4.3 TestService

java 复制代码
package com.xu.test.service;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public interface TestService {

    String test1(String a, Integer b);

    void test2(HttpServletRequest request, HttpServletResponse response, String a, Integer b);

}

4.4 TestServiceImpl

java 复制代码
package com.xu.test.service.impl;

import cn.hutool.core.util.StrUtil;
import com.xu.test.service.JunitTestService;
import com.xu.test.service.TestService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Service;

@Service
public class TestServiceImpl implements TestService {

    @Resource
    private JunitTestService testService;

    @Override
    public String test1(String a, Integer b) {
        if (StrUtil.equals("test", a)) {
            testService.test(a);
            return "b";
        }
        return "a";
    }

    @Override
    public void test2(HttpServletRequest request, HttpServletResponse response, String a, Integer b) {
        if (StrUtil.equals("test", a)) {
            System.out.println(a);
        }
        System.out.println(b);
    }

    private static String getNewStr(String a) {
        return a.concat("单元测试");
    }

}

4.5 MockTest

java 复制代码
package com.xu.test;

import com.xu.test.service.JunitTestService;
import com.xu.test.service.TestService;
import com.xu.test.service.impl.TestServiceImpl;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
public class MockTest {

    @Mock
    private JunitTestService testService;

    @InjectMocks
    public TestService userService = new TestServiceImpl();

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

    @Test
    public void testMock() {
        Mockito.when(userService.test1("test", 10)).thenReturn("a");
    }

}
相关推荐
SkylerHu12 天前
nodejs运行的mock接口库mock-restful-api
后端·mock·nodejs·restful·mock-restful·mock-api
软件架构师笔记15 天前
深入浅出:Gin框架中的测试与Mock
go·mock·测试·gin
oscar99916 天前
透彻理解并解决Mockito模拟框架的单元测试无法运行的问题
单元测试·mockito
oscar99921 天前
Java 单元测试模拟框架-Mockito 的介绍
java·开发语言·单元测试·mockito
清尘沐歌1 个月前
前端开发快速进行 Mock 数据的方法
前端·mock
lianghyan1 个月前
Junit test with mock
junit·mockito·spy
又菜又爱玩的晴晴2 个月前
mockito+junit完成单元测试
junit·单元测试·mockito
AaronJonah2 个月前
Junit + Mockito保姆级集成测试实践
spring boot·junit·集成测试·mockito
superpigwin2 个月前
go:极简上手使用 stretchr/testify 进行mock测试
go·mock
smacricket002 个月前
前端开发实践与后端开发解耦(一)-- 接口数据mock和接口字段映射
前端·javascript·vue.js·vue·mock·开发实践