首页 > 编程语言 >java 中使用Mockito 时@MockitoSettings的作用是什么

java 中使用Mockito 时@MockitoSettings的作用是什么

时间:2024-09-21 17:05:16浏览次数:1  
标签:java Mockito MockitoSettings 严格 测试 行为 Mock

@MockitoSettings 注解是 Mockito 框架的一部分,用于自定义 Mockito 的配置。它允许你通过注解的方式,调整默认的 Mockito 行为和设置,而无需在每个测试中编写配置代码。此注解可以与 JUnit 5 一起使用,结合 @ExtendWith(MockitoExtension.class) 来增强测试的灵活性。

@MockitoSettings 的主要作用

  • 自定义严格度(Strictness): Mockito 提供不同的严格度模式,用于控制模拟对象在测试过程中的行为检查。通过 @MockitoSettings,你可以定义测试中需要的严格度级别,以控制未使用的 Mock、未定义的行为等。

  • 全局配置: @MockitoSettings 提供了一种便捷的方法,可以为整个测试类或方法设置全局的 Mockito 配置,避免重复代码。

常见属性

@MockitoSettings 目前最常用的属性是 strictness,它控制 Mock 对象的严格程度:

  1. Strictness.LENIENT:

    • 宽松模式,Mockito 不会对未使用的 Mock 方法或未定义行为进行严格检查。这对于较宽松的测试用例非常有用,允许测试中有未调用的 Mock 行为而不抛出异常。

    示例:

    @ExtendWith(MockitoExtension.class)
    @MockitoSettings(strictness = Strictness.LENIENT)
    public class MyTest {
    
        @Mock
        private MyService myService;
    
        @Test
        void testExample() {
            // Mockito 不会严格检查未使用的 Mock 行为
        }
    }
    
  2. Strictness.STRICT_STUBS (默认值):

    • 严格模式,Mockito 会确保每个创建的 Stub(打桩,即定义行为的 Mock 方法)都被测试代码使用。如果有未使用的 Stub,测试将失败。这可以帮助确保每个 Mock 行为都是必要的,避免不必要的 Mock。

    示例:

    @ExtendWith(MockitoExtension.class)
    @MockitoSettings(strictness = Strictness.STRICT_STUBS)
    public class MyTest {
    
        @Mock
        private MyService myService;
    
        @Test
        void testExample() {
            // Mockito 会严格检查 Mock 行为
            when(myService.doSomething()).thenReturn("mocked value");
        }
    }
    

使用场景

  1. 自定义 Mock 行为检查: 当你在测试中不希望 Mockito 对未使用的 Mock 方法进行严格检查时,可以使用 LENIENT 模式,减少不必要的测试失败。

  2. 全局设置严格模式: 对于大型测试类或项目,可以通过 @MockitoSettings 设置全局的 Mock 严格模式,确保所有测试遵循一致的 Mock 行为检查规则。

总结

  • @MockitoSettings 用于调整 Mockito 的全局行为,尤其是设置 Mock 的严格度。
  • 属性 strictness 控制 Mock 的检查方式,LENIENT 提供更宽松的控制,而 STRICT_STUBS 提供更严格的行为验证。

通过使用 @MockitoSettings,你可以灵活地控制测试中的 Mock 行为验证,提高测试的稳定性和可维护性。

标签:java,Mockito,MockitoSettings,严格,测试,行为,Mock
From: https://www.cnblogs.com/gongchengship/p/18424223

相关文章

  • JAVA——面向对象
    面向对象介绍面向对象的概念面向:拿、取对象:能干活的东西面向对象就是拿对应的东西来做相应的事情面向对象抽象理解洗衣服用到洗衣机、扫地用到扫地机器人因此会更方便JAVA中的面向对象在哪里体现?若想生成一个随机数,我们会使用random若想输入,我们会使用scanner............
  • JAVA——字符串
    API和API帮助文档API概念:应用程序编程接口理解:API就是别人写好的东西,可以直接使用JavaAPI:指的是JDK提供的各种功能的Java类这些类将底层的实现封装了起来,我们只需要学习如何使用这些类即可API帮助文档帮助我们更好的使用以及查询各种API的一种工具String概述Str......
  • Andorid+Java使用Apache POI库实现doc、docx、xls、xlsx的读取和写入
    1、前言 最近要用AndroidStudio和Java实现多种文件的导入和读取,包括常见的文本文件txt、doc、docx、xls和xlsx。其中txt用输入输出流操作即可。经过搜索查找,确定了使用ApachePOI库进行其余文件类型的读写。在此记录从开始在apache官网上下载导入包后尝试读取doc便报错,到打......
  • 了解 Javascript 中的 POST 请求
    functionnewPlayer(newForm){fetch("http://localhost:3000/Players",{method:"POST",headers:{'Content-Type':'application/json'},body:JSON.stringify(newForm)}).then(resp=&g......
  • 了解 JavaScript 中的高阶组件和高阶函数
    高阶函数高阶函数是一个函数,它要么接受另一个函数作为参数,要么返回一个函数作为结果。这个概念是函数式编程的基础,并允许强大的抽象。示例:functiongreet(name){return`hello,${name}!`;}functionsayhello(fn,name){returnfn(name);}console.log(sayhello(greet,'......
  • 了解 JavaScript 生成器:强大的代码流控制工具
    生成器是javascript中最强大的功能之一,它允许我们编写可以根据需要暂停和恢复的代码。与一次执行所有代码的常规函数??不同,生成器使用延迟执行,增量返回值,从而更容易处理数据序列、迭代或长时间运行的进程。发电机如何工作?在javascript中,生成器是使用function*关键字定义的......
  • 书评:Eloquent JavaScript – Web 开发人员的基本指南
    作为最广泛使用的编程语言之一,JavaScript为网络提供了动力。然而,由于其快速发展,跟上JavaScript趋势可能具有挑战性。许多关于这个主题的书籍很快就会过时,但有一本书经受住了时间的考验:EloquentJavaScript。这本书已成为开发人员的最爱,并且正在稳步发展为那些希望加深对语言理......
  • Java高级05telnet,Socket
    telnet既测试了端口号也测试了IP是否通畅//80是开放的端口号telnet111.206.208.13580//退出ctrl+]quit//查看本机使用的端口号telnet-anoSocket//客户端publicstaticvoidmain(String[]args){//创建一个Socket对象,指定服务器的IP地址和端口号......
  • JAVA网络编程【基于TCP和UDP协议】超详细!!!
    ip地址:唯一标识主机的地址端口号:用于标识计算机上某个特定的网络程序InetAddress类方法说明InetAddressInetAddress.getLocalHost()静态方法,获取本机InetAddress对象(主机名+ip地址)InetAddressInetAddress.getByName("主机名")根据主机名或者域名获取ip地址对象(主机名+ip地址......
  • Java高级06,线程
    多线程进程:1.进程是系统运行程序的基本单位。2.每一个进程都有自己独立的一块内存空间、一组系统资源。3.每一个进程的内部数据和状态都是完全独立的。线程:线程是进程中执行运算的最小单位,可完成一个独立的顺序控制流程。多线程:一个进程中同时运行多个线程来完成不同......