Mock入门之概念理解

news2024/11/28 4:26:10

当我们讨论软件测试,特别是单元测试时,经常会遇到“mock”和“Mockito”。让我们先了解“mock”,然后详细探讨“Mockito”。

Mock概述

  1. 定义: 在软件测试中,mock是一个模拟真实对象的虚假对象,它模拟了真实对象的行为。使用mock的主要目的是隔离并聚焦于测试的特定部分,确保测试不受外部因素(如数据库、文件系统或网络)的干扰。

  2. 用途:

    • 模拟不容易产生或控制的场景,如异常情况、错误状态等。
    • 加速测试,特别是当真实对象的行为会导致测试速度降低时,例如真实的数据库操作。
    • 隔离单元测试,确保测试聚焦于特定的单元或功能。

Mockito概述

  1. 定义: Mockito是Java的一个流行的mocking框架。它提供了一种简单的方式来创建、验证和操作mock对象。

  2. 特点:

    • 简单性: Mockito的API设计得非常直观,使得创建和验证mock对象变得容易。
    • 自然的Java语法: Mockito使用链式方法调用,使测试代码更加可读。
    • 无需特定的Mock类: Mockito可以轻松地为任何接口或类生成mock实例。
    • 验证方法调用: Mockito不仅可以模拟方法的返回值,还可以验证方法是否被调用、被调用的次数、参数等。
  • Mock是一个通用概念,用于描述模拟真实对象的虚拟对象。
  • Mockito是一个Java库,专门用于创建和操作mock对象。它提供了许多功能,使Java单元测试变得更加简单和直观。

TDD、BDD、DDD

概述

  • TDD(测试驱动开发)、DDD(领域驱动开发)和BDD(行为驱动开发)都是软件开发方法,但焦点和应用方式各不相同。
  • TDD关注先写测试再编写代码的流程。
  • DDD关注将业务逻辑和领域知识集成到设计中
  • BDD关注描述和验证系统的外部行为,同时鼓励各种利益相关者的协作。

TDD (Test-Driven Development)

  • TDD是一种软件开发方法,其中开发者首先为新的功能或修改写下测试然后再编写代码来满足这些测试的要求。
  • 测试最初会失败(因为功能尚未实现),然后开发者编写或修改代码,直至所有测试通过。

Mock与TDD的联系

  • 当使用TDD时,Mock对象帮助我们隔离正在测试的代码部分,确保测试专注于一件事,并且快速执行。
  • Mock允许TDD在没有实际依赖的情况下先编写测试,然后再实现逻辑。

DDD (Domain-Driven Design)

DDD并不关注这些测试点,它更多地关注业务层,业务!业务!业务!Domain!

  • DDD是一种复杂系统的软件建模和设计方法。它主张将复杂性集中于核心领域(即业务逻辑)并将这个领域的知识嵌入系统的设计中。
  • 它强调使用一种共同的、基于领域的语言(称为领域特定语言或DSL)来连接技术专家和非技术利益相关者。

BDD (Behavior-Driven Development)

  • BDD是一种软件开发方法,其鼓励开发者、QA和非技术的业务参与者合作。
  • 它扩展了TDD,重点关注系统的外部行为,而不是单独的单元。
  • BDD使用自然语言样式的语法来描述应用程序的期望行为,例如Cucumber工具中的Gherkin语法。

TDD与极限编程

“极限编程”(Extreme Programming,缩写为XP),它是一种敏捷软件开发方法,而TDD(Test-Driven Development)是XP中的一个关键实践。

极限编程 (XP):

  • 定义: XP是一种轻量级、敏捷的软件开发方法,特别关注客户满意度和团队工作。它鼓励频繁的、小规模的版本发布,以及对每个版本的细致的检查和调整。

  • 核心价值: XP的核心价值观包括沟通、简单、反馈、勇气和尊重。

  • 主要实践: XP有许多特定的工程实践,包括:

    • 持续集成
    • 对代码的集体所有权
    • 小版本发布
    • 持续的客户反馈
    • 测试驱动开发 (TDD)
    • 结对编程
    • 重构

测试驱动开发 (TDD):

  • TDD是一种开发实践,在编写实际的功能代码之前,首先编写测试。TDD的基本流程是:先写一个失败的测试,然后编写尽量少的代码来通过这个测试,最后优化代码。

  • TDD鼓励简单的设计和高度的代码覆盖率,这也是XP中“简单”和“反馈”两个核心价值观的体现。

结论: TDD确实是XP的一个关键实践,但XP包括比TDD更广泛的实践和原则。说TDD是XP的范畴并不完全准确,但可以说TDD是XP的一个重要组成部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1096630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在Google cloud上创建VM虚拟机

登录GCP console,确保Compute Enginee API 已经被eanbled 在左边菜单栏,选择第一个item - VM instance 如果见到上面页面, 则代表compute enginee的API 已经被enabled, 否则要先enable Compute enginee的API. 后者从APIs &…

【Eclipse】取消按空格自动补全,以及出现没有src的解决办法

【Eclipse】设置自动提示 教程 根据上方链接,我们已经知道如何设置Eclipse的自动补全功能了,但是有时候敲变量名的时候按空格,本意是操作习惯,不需要自动补全,但是它却给我们自动补全了,这就造成了困扰&…

14.7 Socket 循环结构体传输

在上述内容中笔者通过一个简单的案例给大家介绍了在套接字编程中如何传递结构体数据,本章将继续延申结构体传输,在某些时候例如我们需要传输一些当前系统的进程列表信息,或者是当前主机中的目录文件,此时就需要使用循环结构体传输…

C++ 引用()的超详细解析(小白必看系列)

目录 一、前言 二、引用的概念介绍 三、引用的五大特性 💦 引用在定义时必须初始化 💦 一个变量可以有多个引用 💦 一个引用可以继续有引用 💦 引用一旦引用一个实体,再不能引用其他实体 💦 可以对任何…

02-spring源码概述-debug流程

文章目录 1. 两个主要ApplicationContext的类继承结构图1.1 ClassPathXmlApplicationContext1.2 ClassPathXmlApplicationContext 2. DefaultListableBeanFactory类继承结构图 1. 两个主要ApplicationContext的类继承结构图 1.1 ClassPathXmlApplicationContext 1.2 ClassPath…

基于SSM的旅游景点管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

MySQL数据库——SQL优化(3/3)-limit 优化、count 优化、update 优化、SQL优化 小结

目录 limit 优化 count 优化 概述 count用法 update 优化 SQL优化 小结 limit 优化 在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低。 当在进行分页查询时,如果执行limit 2000000,1…

11 | JpaRepository 如何自定义

EntityManager 介绍 Java Persistence API 规定,操作数据库实体必须要通过 EntityManager 进行,而我们前面看到了所有的 Repository 在 JPA 里面的实现类是 SimpleJpaRepository,它在真正操作实体的时候都是调用 EntityManager 里面的方法。…

Java中的正则表达式

1、体验正则表达式 import java.util.regex.Matcher; import java.util.regex.Pattern;/*** Description: 体验正则表达式:提取英文单词* Author: yangyongbing* CreateTime: 2023/10/16 08:38* Version: 1.0*/ public class Regexp {public static void main(String[] args)…

【Bug】ERROR ResizeObserver loop completed with undelivered notifications.

【Bug】ERROR ResizeObserver loop completed with undelivered notifications. 报错如下: ERROR ResizeObserver loop completed with undelivered notifications.at handleError (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:299…

Qt 视口和窗口的区别

视口和窗口 绘图设备的物理坐标是基本的坐标系,通过QPainter的平移、旋转等变换可以得到更容易操作的逻辑坐标 为了实现更方便的坐标,QPainter还提供了视口(Viewport)和窗口(Window)坐标系,通过QPainter内部的坐标变换矩阵自动转换为绘图设…

802.1x协议详解,802协议工作原理/认证过程、MAB认证、EAP报文格式

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 802.1x协议 1、什么是802.1x协议2、802.1x架构3、触…

【LeetCode热题100】-- 45.跳跃游戏II

45.跳跃游戏II 方法:贪心 在具体的实现中,维护当前能够到达的最大下标的位置,记为边界。从左到右遍历数组,到达边界时,更新边界并将跳跃次数加一 在遍历数组时,不访问最后一个元素,因为在访问…

命令的历史管理

查看历史命令 cat ~/.bash_history history 清除历史命令 history -c >~/.bash_history 指定命令清除历史命令 history -d 55 vim /etc/profile 修改source /etc/profile (保存修改内容)

麒零8000S到底是7纳米还是14纳米?一切都因台积电玩坏了工艺命名

日本分析机构在拆解了国产5G手机对5G芯片进行扫描后,认为它的工艺只有14纳米,而一些专家则认为这是7纳米,导致如此混乱的原因在于台积电玩坏了芯片工艺的命名规则。 在16纳米之前,芯片制造企业是以栅极间距来认定芯片工艺的&#…

车联网场景中 JT/T 808 协议终端免开发快速接入阿里云 IoT 物联网平台实战

车联网场景中 JT/T 808协议 是一种在中国广泛应用的车载终端通信协议,用于车辆与监控中心之间的数据通信。 01 JT/T808 协议 JT/T808 协议是指交通部颁布的《道路运输车辆卫星定位系统终端通讯协议及数据格式》,广泛应用于车辆远程监管、物流管理、车辆安…

基于SpringBoot+vue的汽车销售管理系统

文章目录 项目介绍主要功能截图:登录首页新订单客户管理添加库存车辆库存管理报表管理员工管理 部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简…

LLM Tech Map 大模型技术图谱

LLM Tech Map 大模型技术图谱 从基础设施、大模型、Agent、AI 编程、工具和平台,以及算力几个方面,为开发者整理了当前 LLM 中最为热门和硬核的技术领域以及相关的软件产品和开源项目。 核心价值:帮助技术人快速了解 LLM 的核心技术和关键方向…

Java毕业设计基于springboot+vue的影视信息网站

项目介绍 影城管理系统的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订单管理,用户前台:首页、电影信息、电影资讯、个人中心…

块链串的实现(c语言)

串有三种三种顺序串,链式串和块链式串 常用的是第一种顺序串 前两者我在这就不进行讲解了,因为就是普通的顺序表和链式表只是其中的值必须是字符而已 为啥需要引入块链式串,我们之前分析过链表的优点是操作方便,而缺点是&#x…