《Gtest_【银行行业测试专场】-《 如何接近“0成本”推动单元测试在项目中落地实施?》成方金科余萝.pdf》由会员分享,可在线阅读,更多相关《Gtest_【银行行业测试专场】-《 如何接近“0成本”推动单元测试在项目中落地实施?》成方金科余萝.pdf(24页珍藏版)》请在三个皮匠报告上搜索。
1、测无止境 数智共进2024全球软件测试技术峰会北京 12月如何接近“0成本”推动单元测试在项目中落地实施?演讲人:余萝2024年12月06日姓名:余萝成方金科自动化测试框架负责人。主导开发了成方金科UI自动化测试框架和单元测试框架。单元测试现状分析Unit Test Situation Analysis接近“0成本”的解决方案Solution03/未来工作计划Future Plan单元测试现状分析01单元测试现状可以提升代码质量;有助于提高代码的测试覆盖率,确保关键功能得到充分测试;提高自动化测试占比,降低人工测试成本。看上去的美好项目工期紧张,没时间编写测试用例;需求变化频繁,测试用例维护成
2、本高;因为各种各样的原因,测试用例无法稳定运行。落地时的艰难单元测试不是用来找Bug的单元测试可以用来找Bug吗?需求变动频繁,逻辑相对简单,需快速迭代开发的应用级软件架构设计良好,需求变化小,稳定性要求高,算法复杂,处于长期迭代开发的系统级软件应用级软件难以推动单元测试的原因10根短水管与1根长水管Mock数据麻烦,测试用例编写成本高对开发人员水平要求高单元测试用例数量数倍于接口测试用例测试用例运行稳定性得不到保证CRUD业务逻辑简单没必要单元测试需求变化快,单测起不到回归测试作用对迭代速度的要求多于对稳定性的要求经常对代码重构,才能发挥单测价值功能测试能够覆盖绝大多数测试场景“快”是所有问
3、题的答案接近“0”成本的解决方案02基础框架选择在单元测试领域,Junit为广泛使用的主流单元测试基础框架。同时Junit5相较于Junit4,功能更显丰富,使用Junit5作为单元测试基础框架。单元测试基础框架Junit5模拟挡板框架Mockito13相 较 于 JUnit 原 生 断 言 功 能,AssertJ语法更简洁,功能更丰富。使用AssertJ作为断言框架。断言框架AssertJ2Mockito和JMockit都是流行的JavaMock框架,用于在单元测试中模拟依赖函数的行为。相较于JMockit,Mockito在社区活跃度,API易用性,对主流插件和框架(Springboot等)
4、的支持等方面都存在优势。单元测试两种模式标准单元测试是对软件中的最小可测试部分(通常是函数)进行检查和验证。测试过程中,为了保证测试用例能独立地可重复多次执行,单元测试通常会以Mock方式隔离函数所需外部依赖,只对函数本身内部逻辑进行测试。标准模式Springboot自带注解模式单元测试,是指通过Springboot自带注解SpringbootTest进行单元测试用例编写。该模式并不要求对所有依赖对象进行Mock处理,可以直接使用自动注入的Spring容器中的对象。Springboot模式单元测试的原则独立的(Independent)。单元测试应该保持独立性。为了保证单元测试稳定可靠且便于维护
5、,单元测试用例之间不能互相调用,也不能对外部资源有所依赖。12可重复的(Repeatable)。单元测试是可以重复执行的,不能受到外界环境的影响。单元测试通常会被放入持续集成中,每次有代码提交时单元测试都会被执行。快速的(Fast)。单元测试应该是可以快速运行的,在各种测试方法中,单元测试的运行速度是最快的,大型项目的单元测试通常应该在几分钟内运行完毕。3一些现有测试用例自动生成方案我们的解决方案我们的解决方案调用被依赖方法A0功能测试,调用被测试方法A方法A返回运行方法A的单元测试断言方法A0参数与返回值方法A1参数与返回值方法A2参数与返回值方法A参数与返回值记录记录记录记录调用被依赖方法
6、A1调用被依赖方法A2调用被依赖方法A0调用被依赖方法A1调用被依赖方法A2读取生成模拟数据读取生成模拟数据读取生成模拟数据读取进行断言一个具体的实例假设被测试函数如上,其功能实现了为查询出来的所有用户添加对应的部门名称字段。被测试函数传统测试用例面对的困难每个被测函数的多个测试用例需要模拟不同的数据;函数入参,返回值,被依赖函数入参返回值都需要进行模拟;测试数据之间存在复杂关联关系,模拟数据时需要考虑依赖关系;需要学习使用Mockito框架语法。1234插件一键生成通过Mo