Java 单元测试高频面试题及详细答案(实战完整版)_第1页
Java 单元测试高频面试题及详细答案(实战完整版)_第2页
Java 单元测试高频面试题及详细答案(实战完整版)_第3页
Java 单元测试高频面试题及详细答案(实战完整版)_第4页
Java 单元测试高频面试题及详细答案(实战完整版)_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java单元测试高频面试题及详细答案(实战完整版)一、单元测试基础概念面试题1.什么是单元测试?单元测试的核心作用是什么?答案:单元测试是针对程序中最小的可测试单元(Java中一般是单个方法、工具类、独立接口方法)进行的自动化测试,是代码层面最基础、最细致的测试方式,由开发人员编写、执行。核心作用主要有四点:第一,提前发现代码Bug。在开发阶段就能校验逻辑正确性,避免问题流转到测试、线上环境,大幅降低修复成本。第二,保障代码重构安全。后续迭代优化、重构代码时,通过运行单元测试可以快速验证原有逻辑是否被破坏,杜绝改出新Bug。第三,简化调试流程。单元测试聚焦单个方法逻辑,出错时可以精准定位问题代码,不用全局排查,提升调试效率。第四,充当代码文档。规范的单元测试可以直观体现方法的入参、出参、核心逻辑和边界场景,方便后续接手人员快速读懂代码。2.单元测试、集成测试、功能测试的区别?答案:三者属于软件测试不同层级,测试范围、侧重点、执行人员完全不同,具体区别如下:1.单元测试:最小粒度测试,聚焦单个方法、类的逻辑,只测代码内部逻辑,不依赖外部接口、数据库、服务,由开发人员编写执行,追求代码逻辑精准、分支全覆盖。2.集成测试:模块级测试,聚焦多个单元、模块之间的交互,比如接口调用、服务通信、数据传递,重点校验模块间协作是否正常,依赖部分外部环境。3.功能测试:业务场景测试,由测试人员执行,聚焦整体业务流程,模拟用户真实操作,校验产品功能是否符合需求文档,不关注底层代码实现。总结:单元测试测代码逻辑,集成测试测模块协作,功能测试测业务场景。3.Java主流单元测试框架有哪些?各自适用场景?答案:Java开发中最常用的单元测试框架主要是JUnit4、JUnit5、TestNG,适配不同开发场景:1.JUnit4:经典老牌框架,注解简洁、上手简单,生态成熟,适配绝大多数传统项目、Spring老项目,是企业最通用的基础单元测试框架。缺点是功能相对基础,不支持高级特性。2.JUnit5(Jupiter):JUnit4的升级版,优化了注解体系,支持拓展性更强的插件机制,支持Java8及以上新特性,兼容Lambda表达式,是目前新项目、SpringBoot项目的首选框架。3.TestNG:功能更全面,原生支持用例分组、依赖测试、并发测试、失败用例重跑、详细测试报告,适合复杂项目、接口批量测试、自动化测试场景,企业自动化测试中使用较多。二、JUnit核心面试题(高频必考)1.JUnit4常用注解及执行顺序?答案:JUnit4核心常用注解及作用:1、@Test:标记当前方法为测试用例方法,必须是public、无返回值、无参数方法。2、@Before:每个测试方法执行前都会执行一次,用于初始化测试数据、初始化对象。3、@After:每个测试方法执行后都会执行一次,用于释放资源、清理测试数据。4、@BeforeClass:所有测试方法执行前只执行一次,必须是静态方法,用于全局初始化,比如加载配置、创建数据库连接。5、@AfterClass:所有测试方法执行完毕后只执行一次,静态方法,用于全局资源释放。6、@Ignore:忽略当前测试方法,执行测试时跳过该用例。7、@Test(expected=异常类.class):用于测试方法是否抛出指定异常。完整执行顺序:@BeforeClass→@Before→@Test→@After→@Before→@Test→@After→@AfterClass2.JUnit5相较于JUnit4有哪些核心改进?答案:JUnit5整体架构更灵活、功能更强大,核心改进点如下:1、注解优化:废除了老旧注解,统一简化语义。@BeforeClass→@BeforeAll、@AfterClass→@AfterAll、@Before→@BeforeEach、@After→@AfterEach,语义更直观,不易混淆。2、非强制静态方法:JUnit4中全局初始化方法必须static,JUnit5的@BeforeAll、@AfterAll仅在非测试类嵌套场景需要静态,普通场景无需静态,代码更灵活。3、支持Java新特性:原生支持Lambda表达式、流式断言、参数化测试,适配高版本Java。4、拓展机制更强:摒弃JUnit4老旧的运行器机制,提供全新的拓展模型,自定义测试拓展、拦截用例更简单。5、分层架构:分为引擎、API、拓展模块,可按需引入依赖,轻量化、可定制化程度更高。3.JUnit断言机制是什么?常用断言方法有哪些?答案:断言是单元测试的核心,用于校验方法执行结果是否符合预期。如果断言条件不满足,直接判定用例失败,抛出断言异常,终止当前用例执行。JUnit通用核心断言方法:1、assertEquals(预期值,实际值):校验两个值是否相等,支持基本类型、字符串、对象。2、assertNotEquals():校验两个值不相等。3、assertTrue(条件):校验条件结果为true。4、assertFalse(条件):校验条件结果为false。5、assertNull(对象):校验对象为空。6、assertNotNull(对象):校验对象非空。7、assertArrayEquals():校验两个数组内容完全一致。8、fail():直接让当前用例失败,常用于未完成分支、异常兜底场景。三、Mock测试核心面试题(重点高频)1.什么是Mock测试?为什么单元测试需要Mock?答案:Mock测试是通过模拟对象、模拟外部依赖的方式,隔离测试目标的外部环境,只聚焦当前代码逻辑的测试方式。日常开发中,很多方法依赖外部资源,比如数据库、Redis、第三方接口、MQ、其他业务服务,如果直接测试,会存在环境依赖、数据污染、测试速度慢、不可控等问题。引入Mock的核心目的:第一,解除外部依赖:无需启动数据库、第三方服务,本地即可完成单元测试,不依赖测试环境。第二,构造任意测试场景:可以手动模拟外部接口超时、返回异常、返回特殊数据,覆盖正常、异常、边界场景。第三,避免数据污染:不会操作真实数据库和业务数据,保证测试可重复、无副作用。第四,提升测试速度:无需连接外部资源,用例执行毫秒级完成,适配批量自动化测试。2.Mockito核心常用注解和用法?答案:Mockito是Java最主流的Mock测试框架,SpringBoot单元测试默认集成,核心注解及作用:1、@Mock:创建一个模拟对象,完全替代真实对象,所有方法默认返回空值或默认值,无真实业务逻辑。2、@InjectMocks:创建真实的测试目标对象,并自动将@Mock、@Spy修饰的模拟对象注入到目标对象中,是业务类单元测试的核心注解。3、@Spy:监控真实对象,默认执行原有真实方法逻辑,可单独对指定方法模拟返回值,兼顾真实逻辑和自定义模拟。4、@MockBean:SpringBoot专属注解,用于替换Spring容器中的Bean,适配Spring环境单元测试。5、@Verify:校验模拟对象的方法是否被执行、执行次数是否符合预期。3.@Mock和@Spy的核心区别?答案:两者核心差异在于是否保留原有真实逻辑,具体区别如下:1.@Mock模拟对象完全虚拟对象,不加载任何原有业务逻辑。所有方法默认空实现,返回默认空值(对象null、数字0、布尔false)。适合彻底隔离外部依赖,不需要执行真实方法的场景。2.@Spy监控对象基于真实对象创建,默认执行原有真实的方法逻辑。只有手动stub打桩的方法会返回自定义值,其余方法正常执行原有逻辑。适合需要测试真实逻辑,仅对部分依赖方法做模拟的场景。简单总结:彻底隔离用@Mock,保留真实逻辑、局部模拟用@Spy。四、实战场景与规范面试题1.什么是测试覆盖率?常用覆盖率指标有哪些?答案:测试覆盖率是衡量单元测试对业务代码的覆盖程度,是评估单元测试质量的核心指标,覆盖率越高,说明代码被测试越充分,隐藏Bug概率越低。企业常用三大覆盖率指标:1、行覆盖率:统计被执行到的代码行数占总代码行数的比例,最基础的覆盖率指标。2、分支覆盖率:统计if、else、switch、三元运算等分支的覆盖比例,重点校验逻辑分支是否全覆盖,比行覆盖率更有参考价值。3、方法覆盖率:统计被测试执行到的方法占总方法数的比例。行业规范:核心业务代码要求分支覆盖率不低于80%,工具类、核心工具方法尽量做到100%覆盖。2.优秀单元测试用例的编写规范?答案:企业开发中,规范的单元测试用例需要满足以下要求:1、独立性:每个用例互不干扰,不依赖其他用例的执行结果,单独运行、批量运行结果一致。2、全覆盖:覆盖正常场景、边界场景、异常场景,比如参数为空、参数极值、业务异常、超时失败等。3、可重复:多次执行用例,结果始终一致,不存在偶现失败的情况,无环境、数据依赖。4、语义清晰:用例命名规范,见名知意,比如testUserLoginSuccess、testUserLoginParamNullFail,一眼看懂测试场景。5、无副作用:不操作真实业务数据,不污染数据库、缓存资源,测试后自动清理临时数据。3.单元测试中常见的坑和问题有哪些?答案:日常开发中单元测试最常见的问题主要有5点:1、只测正常场景,忽略异常和边界场景:大部分用例只校验成功逻辑,空参数、非法参数、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论