当前位置: 首页 > article >正文

1.2 环境搭建


环境搭建

为快速启动Mockito测试,本节详细说明如何在不同构建工具中配置Mockito与JUnit 5,并验证环境是否正常工作。


1. 前置条件
  • JDK版本
    • Mockito 5.x 需 JDK 11+
    • Mockito 4.x 兼容 JDK 8+(适用于旧项目)
  • 构建工具
    • Maven 3.6+ 或 Gradle 7.x+
  • IDE支持
    • IntelliJ IDEA / Eclipse / VS Code(需安装Java插件)

2. Maven 配置

pom.xml 中添加以下依赖:

<properties>
    <junit-jupiter.version>5.10.0</junit-jupiter.version>
    <mockito.version>5.12.0</mockito.version>
</properties>

<dependencies>
    <!-- JUnit 5 核心依赖 -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>${junit-jupiter.version}</version>
        <scope>test</scope>
    </dependency>

    <!-- Mockito 核心库 -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>${mockito.version}</version>
        <scope>test</scope>
    </dependency>

    <!-- Mockito 对 JUnit 5 的扩展支持 -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-junit-jupiter</artifactId>
        <version>${mockito.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

3. Gradle 配置

build.gradle 中添加:

dependencies {
    // JUnit 5
    testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'

    // Mockito
    testImplementation 'org.mockito:mockito-core:5.12.0'
    testImplementation 'org.mockito:mockito-junit-jupiter:5.12.0'
}

test {
    useJUnitPlatform() // 启用JUnit 5测试引擎
}

4. IDE 配置验证
IntelliJ IDEA
  1. 创建测试类:右击源码目录 → New → Java Class → 类名以 Test 结尾(如 UserServiceTest)。
  2. 自动导入Mockito:
    • 输入 mock(List.class) → 按 Alt+Enter 自动导入 org.mockito.Mockito.mock
  3. 运行测试:点击测试方法旁的绿色箭头。
Eclipse
  1. 安装JUnit 5插件:
    • Help → Eclipse Marketplace → 搜索 "JUnit 5" → 安装 "JUnit 5 Support"
  2. 创建测试类:File → New → JUnit Test Case → 选择JUnit 5。

5. 环境验证测试

创建第一个Mockito测试类,验证环境是否正常:

import org.junit.jupiter.api.Test;
import java.util.List;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;

class EnvironmentValidationTest {

    @Test
    void testMockitoBasicFunctionality() {
        // 1. 创建Mock对象
        List<String> mockList = mock(List.class);

        // 2. 配置方法桩(Stubbing)
        when(mockList.size()).thenReturn(100);

        // 3. 调用被测方法
        int size = mockList.size();

        // 4. 断言验证
        assertEquals(100, size, "Mock对象的size()应返回预设值100");
        
        // 5. 行为验证
        verify(mockList).size(); // 验证size()被调用一次
    }
}

预期结果:测试通过,无错误日志。


6. 常见问题排查
问题现象原因与解决方案
NoSuchMethodError依赖版本冲突 → 统一JUnit 5和Mockito版本(如Mockito 5.x + JUnit 5.x)。
@Mock注解无效未启用Mockito扩展 → 在测试类上添加 @ExtendWith(MockitoExtension.class)
Gradle测试未执行未配置JUnit平台 → 确保build.gradle中包含 test { useJUnitPlatform() }
静态导入失败手动添加静态导入:import static org.mockito.Mockito.*;import static org.junit.jupiter.api.Assertions.*;

7. 进阶配置(可选)
  • 启用严格Mock模式
    在测试类初始化时添加以下代码,检测冗余的Mock配置:
    @BeforeEach
    void setup() {
        Mockito.lenient().when(...); // 显式标记允许宽松配置
    }
    
  • 多模块项目配置
    在父模块的 pom.xml 中统一管理Mockito版本:
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-bom</artifactId>
                <version>5.12.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

8. 验证成功标志
  • 测试控制台输出绿色成功标记(IDE或构建工具)。
  • Maven执行命令验证:
    mvn clean test -Dtest=EnvironmentValidationTest
    
  • Gradle执行命令验证:
    ./gradlew test --tests EnvironmentValidationTest
    

完成环境搭建后,即可进入核心API学习,开始编写真实的单元测试用例。


http://www.kler.cn/a/540806.html

相关文章:

  • 分布式kettle调度平台- web版转换,作业编排新功能介绍
  • 蓝桥杯---数青蛙(leetcode第1419题)
  • 使用Redis实现业务信息缓存(缓存详解,缓存更新策略,缓存三大问题)
  • 算法15(力扣347)——前k个高频元素
  • 手动配置IP
  • 网站快速收录策略:提升爬虫抓取效率
  • 「vue3-element-admin」告别 vite-plugin-svg-icons!用 @unocss/preset-icons 加载本地 SVG 图标
  • 2.1 Mockito核心API详解
  • PriorityQueue优先级队列的使用和Top-k问题
  • 小白零基础学习深度学习之张量
  • 【C++语言】类和对象(下)
  • 备战蓝桥杯:二分算法详解以及模板题
  • Redis持久化机制详解
  • Proxy vs DefineProperty
  • 车载工具报错分析:CANoe、CANalyzer问题:Stuff Error
  • Java 大视界 -- Java 大数据在智能家居中的应用与场景构建(79)
  • Vue:Table合并行于列
  • 用Go实现 SSE 实时推送消息(消息通知)——思悟项目技术4
  • 绘制中国平安股价的交互式 K 线图
  • 31、spark-on-kubernetes中任务报错No space left on device
  • Fastadmin根据链接参数显示不同列表格
  • 10 FastAPI 的自动文档
  • OpenAI 实战进阶教程 - 第十二节 : 多模态任务开发(文本、图像、音频)
  • 持续集成-笔记
  • DeepSeek之于心理学的一点思考
  • Java中有100万个对象,用list map泛型存储和用list对象泛型存储,那个占用空间大,为什么...