SpringBoot Mockito 依赖注入

1 添加依赖

<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

package com.xu.test.service;

public interface JunitTestService {

    String test(String a);

}

4.2 JunitTestServiceImpl

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

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

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

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

}

相关推荐

  1. .NET8 依赖注入

    2024-05-11 17:08:07       52 阅读
  2. C# DI依赖注入

    2024-05-11 17:08:07       57 阅读
  3. 【csharp】依赖注入

    2024-05-11 17:08:07       54 阅读
  4. SpringBoot整理-依赖注入

    2024-05-11 17:08:07       49 阅读
  5. WebSocketServer依赖注入问题

    2024-05-11 17:08:07       50 阅读
  6. Spring 依赖注入

    2024-05-11 17:08:07       33 阅读
  7. golang wire 依赖注入

    2024-05-11 17:08:07       37 阅读
  8. SpringBoot Mockito 依赖注入

    2024-05-11 17:08:07       36 阅读
  9. Spring的依赖注入

    2024-05-11 17:08:07       33 阅读
  10. Spring之注解实现依赖注入

    2024-05-11 17:08:07       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 17:08:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 17:08:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 17:08:07       87 阅读
  4. Python语言-面向对象

    2024-05-11 17:08:07       96 阅读

热门阅读

  1. vue2中mixins的用法和需要注意的地方

    2024-05-11 17:08:07       31 阅读
  2. linux netstat 查看指定端口

    2024-05-11 17:08:07       34 阅读
  3. 【1分钟了解npm】

    2024-05-11 17:08:07       28 阅读
  4. 不使用EF框架实现数据库增删改查

    2024-05-11 17:08:07       32 阅读
  5. .NET_控制反转简述

    2024-05-11 17:08:07       37 阅读
  6. No signature found in package of version 2 or newer for package

    2024-05-11 17:08:07       26 阅读
  7. go-Expect-实验

    2024-05-11 17:08:07       35 阅读
  8. Linux 第二十六章

    2024-05-11 17:08:07       33 阅读
  9. vue3-seamless-scroll实现循环滚动

    2024-05-11 17:08:07       27 阅读
  10. 以太网网络变压器型号

    2024-05-11 17:08:07       29 阅读
  11. git 更换远程仓库地址三种方法总结

    2024-05-11 17:08:07       28 阅读
  12. 【笔记】Android MVNO APN 字段配置方法

    2024-05-11 17:08:07       27 阅读
  13. react18【系列实用教程】useState (2024最新版)

    2024-05-11 17:08:07       38 阅读