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

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

开发者学堂课程【高校精品课-厦门大学 -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

相关文章
|
4天前
|
Java 测试技术 持续交付
自动化测试实践:从单元测试到集成测试
【6月更文挑战第28天】-单元测试:聚焦代码最小单元,确保每个函数或模块按预期工作。使用测试框架(如JUnit, unittest),编写覆盖所有功能和边界的测试用例,持续集成确保每次变更后自动测试。 - 集成测试:关注模块间交互,检查协同工作。选择集成策略,编写集成测试用例,模拟真实环境执行测试,整合到CI/CD流程以持续验证软件稳定性。 自动化测试提升软件质量,降低成本,加速开发周期,是现代软件开发不可或缺的部分。
|
3天前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之选择独享调度,数据集成里可以使用,但是数据地图里面测试无法通过,是什么原因导致的
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
9 0
DataWorks产品使用合集之选择独享调度,数据集成里可以使用,但是数据地图里面测试无法通过,是什么原因导致的
|
1天前
|
Java 测试技术 数据库
Java单元测试与集成测试的最佳实践
Java单元测试与集成测试的最佳实践
|
8天前
|
敏捷开发 测试技术 持续交付
探索自动化测试在持续集成中的关键作用
【6月更文挑战第23天】 在软件开发的快节奏世界中,自动化测试不再是一个奢侈的选择,而是确保产品质量和加快发布周期的必要手段。本文将深入探讨自动化测试如何与持续集成(CI)流程紧密结合,提升开发效率,减少人为错误,并确保软件的稳定性和可靠性。我们将通过具体案例分析,揭示自动化测试在现代软件开发生命周期中所扮演的角色,以及它如何帮助团队适应敏捷开发的需求。
|
12天前
|
SQL 安全 Java
探索软件测试的多维策略:从单元到集成,再到性能与安全
在软件开发过程中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的多维策略,包括单元测试、集成测试、性能测试和安全测试。我们将分析每种测试方法的优势和局限性,并讨论如何将这些策略整合到一个全面的测试计划中,以提高软件的可靠性和安全性。文章还将提供实用的例子和最佳实践,帮助读者更好地理解和应用这些测试技术。
|
14天前
|
测试技术 持续交付 开发者
探索自动化测试在持续集成中的关键作用
【6月更文挑战第16天】随着软件开发实践的不断演进,持续集成已经成为确保代码质量和快速迭代的重要工具。自动化测试作为其核心组件之一,不仅提高了测试效率,而且保障了软件质量的稳定性和可靠性。本文将深入探讨自动化测试在持续集成流程中扮演的角色,分析其对提升开发流程效率的影响,并讨论实施自动化测试时面临的挑战及解决策略。
21 3
|
21天前
|
SQL DataWorks 安全
DataWorks产品使用合集之在进行测试数据集成时,目标库的数据是源库数据的3倍量,是什么导致的
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
DataWorks产品使用合集之在进行测试数据集成时,目标库的数据是源库数据的3倍量,是什么导致的
|
4天前
|
敏捷开发 jenkins 测试技术
软件测试中的自动化与持续集成:提高开发效率和产品质量
在软件开发的生命周期中,测试阶段扮演着至关重要的角色。随着敏捷开发模式的普及,自动化测试和持续集成(CI)已成为确保软件质量和加快交付速度的关键策略。本文深入探讨了自动化测试和持续集成的概念、实施步骤及其对软件开发流程的影响。通过引用最新的行业研究和案例分析,文章揭示了这些技术如何帮助团队减少人为错误,缩短反馈循环,并最终提升产品的稳定性和用户体验。
|
4天前
|
Java 测试技术 开发者
Java中的单元测试与集成测试策略
Java中的单元测试与集成测试策略
|
4天前
|
SQL 数据采集 DataWorks
DataWorks操作报错合集之数据集成里面的数据调度独享资源组测试通过了,但是数据地图里无法通过,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。