切片测试与集成测试|学习笔记

简介: 快速学习切片测试与集成测试

开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术切片测试与集成测试学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/80/detail/15966


切片测试与集成测试


内容介绍:

一、前言

二、切片测试

三、Controller

四、Service

五、集成测试的代码

 

一、前言

切片测试和集成测试。切片测试和集成测试其实用了相同的技术,都会依赖于spring 框架以及 spring 的环境来进行测试。但切片测试和集成测试的差别在于切片测试可以在 spring 的环境中间把某一部分切开,切的时候既可以横向切也可以纵向切。在本课例子中的是横向切,也就是把 control 层和 service 层切开,可以纵向切,就是把相互依赖的比如 service 对象,切开来单独进行测试切片测试

和集成测试是怎样做的

 

二、切片测试

切片测试中 controller 的代码跟 service 代码分开来单独做切片测试下面分为

controller service 两部分进行梳理。


三、Controller

因为数据里只有一个 controller goodscontroller所以做了一个叫做goods controller taste 的类放到了 controller 的包底下测试前面两个标签

1.第一个标签

1)、第一个标签是@Spring book taste,当前的类是一个测试类,而且是一个springboard 测试类,所以后面有一个 classes=demo application class,跟model对象或者vo对象的测试不一样,要测试 controller 需要依赖于 spring 容器的环境。2)、spring 容器的环境在哪?后面定义其实就是要用 demoapplication.class文件中间所描述的 spring 的环境,这个文件就是生产的环境的,应用环境是一致的。因为根是定义在 demoapplication.class 里

图片8.png

 

第一句话,所描述的内容只有两个,第一个是当前的类是一个测试类,第二测试类所用的环境是跟的生产的环境是完全一样

3)、第二个注解是关于 MVC 的部分,因为如果严格去测试 controller 的话,应该把service容器运行起来,向 service 容器发HTTP的请求,然后去看HTTP的返回,是不是预期的结果。但是这样测试很慢,因为过程虽然单机上来来执行,但它还是通过网络的网络端口的一个过程,而且还要依赖于设备的容器,所以在测控制器的时候,往往采用了一种模拟的方式,并不真正的去启动设备的容器,而是模拟的一个测试过程,通过模拟的过程,去发 HTT P的 request,实际没发,就是模拟了一个HTTP 的 request 的过程。完成一个测试,称这样的一个模拟测试叫做 mockmvc

图中可以看到 mockmvc 是被注入进来的,mockmvc 有很多的配置

图片9.png

2.第二个标签

第二个标签 AuttoConfiguremockmvc,其实就是去自动配置模拟MVC的这个相关

的配置,现在没有给值,其实可以在后面配一些值。这是测试类前面的两个标签

3.测试类里注入的两个对象

测试类里面,注进了两个对象,一个对象是 mock mvc,就是用来模拟MVC的控制器第二个是 mock bean。

1)、因为 goods service 需要跟 controller 切割开,因为 goodscontroller 之间只用了goodsservice,所以用一个mock bean 去标记 goodsservice 对象,加了两个标签以后,Spring 的容器会把这两个对象注射进来,通过这点来说,能够看出来good controller case 其实是一个 spring 对象

2)、spring的容器注进来两个对象的话,其中,goods service 对象其实并不是真正在生产代码中间的 goods service 对象,而是注进来一个模拟的对象。,实现跟goods service 类相同的行为

 

四、service

goods service 实现的方法提供一个 given 的方式来模拟所有的方法返回的值

1. 第一个测试方法,

这个方法前面要加一个@test 标签,就表示这个方法是一个要运行的测试的方法。

1)、第一句话是,对于住进来的模拟的 goods service 要定义它的 find ID的这个方法的行为是什么?因为目前要测 controller 的 get goods 版 ID 的方法是调goods service的find ID方法的,通过 given 的一个定义,定义了find ID

2)、如果参数值输进来是1的话,它会返回一个什么样的值?它会返回从goods factory 中间创建出来的一个ID为1的对象,这个可以去看 goods factory 的相关的方法,后面的部分有了这样的一个前提,就会通过某个 MVC 去发出一个 get的请求,Perform get 发出一个 get 的请求,And expect 所描述的就是期望请求的返回值,它的 statvs 是OK,就是200

3)、期望content的content type是application Json的Utf-8码,然后,要把真正的返回值拿过来所以去andReturn(). getResponse() getCountent AsString ();作为一个字符串拿过来。拿过来的是一个 Json 的串,所以把期望的值也用 Json 的字串写,然后再利用了 Json asser 包,或者说引入一个叫做 Json assert 包里的方法。

4)、Json asser这个方法的主要作用就是去比较两个 Json 串的是不是一样的。

第一个参数是期望的 Json

第二个是正式返回Json

第三个参数其实是做严格比较,还是不严格比较true 的话就是严格比较,就是两个自串的东西是完全一样的,不严格比较就是可以允许r esponse Json 里的值多于expect里Json 的值就是expect 的Json 的项可能少一些,response 的项是多一些,只要 response 里返回的 Expect response中间有的值在 response string 中间也有,结果就是对的。如果第三步是 force 的话,就是这样的一个定义

2.第二个测试方法

后面的方法其实类似,第二个方法,是去测它的search goods by name,同样因为方法中间了goods service的search by name方法,所以定义了参数是墨迹

的话,创建一个带墨迹的goods,就会给它一个返回值。

创建对象的部分来说,given,是描述了 good servic e的 create goods 一个方法。因为在creategoods中间传进去的是一个 goodsvo 的对象,但是在测试代码中间的vo的对象,和goods service对象不一定是同一个对象,所以用了一个 any,但其实用了any的话,就是只要去调 create goods,它返回的就是看到 goods 对象,就是return 建出来的 goods 对象。

Modify 和 modify goods taste 和并列特色比较简单,其实就是直接返回了 true,来把 goods service 的对象和 controller 对象切开,使得测试代码只会测controller 的对象。

图片10.png


五、集成测试的代码

集成测试代码在 good controller integration tes t,集成测试的代码跟切片测试代码是一样的,只是没有去模拟 goods service

注入对象中间没有去注入goods service 模拟的 goods service 的对象,在所有的方法之前,也没有去定义 Good service 对象将会返回什么样的值,就直接去通过mockMVC 去调它对应的 controller 的方法,然后去看它的值是不是强硬的值,测的是一个整体,把它称之为集成测试

图片11.png

相关文章
|
5月前
|
XML jenkins 机器人
JMeter+Ant+Jenkins实现接口自动化测试持续集成
本文介绍了如何使用Ant生成JMeter接口测试报告,并集成到Jenkins中实现自动化测试。内容涵盖Ant与JMeter环境配置、build.xml文件设置、测试执行及报告生成,同时包括Jenkins插件安装、项目配置和钉钉消息通知的集成,帮助实现持续测试与结果可视化。
723 0
|
3月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
186 6
|
5月前
|
Web App开发 开发框架 .NET
Playwright 自动化测试系列(6)| 第三阶段:测试框架集成​指南:参数化测试 + 多浏览器并行执行
Pytest 与 Playwright 集成可提升自动化测试效率,支持参数化测试、多浏览器并行执行及统一报告生成。通过数据驱动、Fixture 管理和并行优化,显著增强测试覆盖率与执行速度,适用于复杂 Web 应用测试场景。
|
6月前
|
人工智能 Java 测试技术
SpringBoot 测试实践:单元测试与集成测试
在 Spring Boot 测试中,@MockBean 用于创建完全模拟的 Bean,替代真实对象行为;而 @SpyBean 则用于部分模拟,保留未指定方法的真实实现。两者结合 Mockito 可灵活控制依赖行为,提升测试覆盖率。合理使用 @ContextConfiguration 和避免滥用 @SpringBootTest 可优化测试上下文加载速度,提高测试效率。
365 5
|
5月前
|
测试技术 API C++
Playwright 自动化测试系列(7)| 第三阶段:测试框架集成​​Page Object 模式
本课程详解Playwright测试框架中的Page Object模式,通过电商登录-下单实战演示PO架构设计与高级技巧,结合Pytest实现多用户测试。重点解析PO模式提升代码复用性、降低维护成本的核心价值,并提供常见问题解决方案,助力构建高可维护性的自动化测试体系。
|
10月前
|
存储 人工智能 测试技术
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
141689 29
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
|
敏捷开发 测试技术 持续交付
探索软件测试中的自动化与持续集成
在快速迭代的软件开发环境中,自动化测试和持续集成(CI)已成为确保产品质量和加速交付的关键策略。本文将深入探讨自动化测试的基本原理、实施步骤以及它如何与持续集成流程相结合,以提高软件开发的效率和可靠性。我们将通过实际案例分析,展示自动化测试和CI的最佳实践,以及它们如何帮助企业实现更快的市场响应时间和更高的客户满意度。
222 16
|
jenkins 测试技术 持续交付
软件测试中的自动化与持续集成:提升效率与质量的关键
在快节奏的软件开发环境中,自动化测试和持续集成已经成为不可或缺的部分。本文将探讨自动化测试和持续集成的重要性,以及它们如何协同工作以提高软件开发的效率和质量。通过分析自动化测试的策略、工具选择以及持续集成的实践,我们将揭示这些技术如何帮助开发团队快速响应变化,减少错误,并加速产品上市时间。
|
机器学习/深度学习 人工智能 jenkins
软件测试中的自动化与持续集成实践
在快速迭代的软件开发过程中,自动化测试和持续集成(CI)是确保代码质量和加速产品上市的关键。本文探讨了自动化测试的重要性、常见的自动化测试工具以及如何将自动化测试整合到持续集成流程中,以提高软件测试的效率和可靠性。通过案例分析,展示了自动化测试和持续集成在实际项目中的应用效果,并提供了实施建议。
|
前端开发 JavaScript 测试技术
前端测试技术中,如何提高集成测试的效率?
前端测试技术中,如何提高集成测试的效率?