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

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

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

相关文章
|
9天前
|
敏捷开发 jenkins Devops
探索软件测试的新篇章:自动化与持续集成的融合之道
【9月更文挑战第31天】 在软件开发的海洋中,测试是确保航船稳健前行的灯塔。本文将引领读者驶入软件测试的新纪元,探索自动化测试和持续集成如何携手共创高效、可靠的开发流程。我们将从基础概念出发,逐步深入到实际操作层面,揭示这一现代软件开发模式的核心价值和实现路径。你将看到,通过代码示例和实践案例,如何将理论转化为提升软件质量的具体行动。
|
1天前
|
测试技术
软件质量保护与测试(第2版)学习总结第十三章 集成测试
本文是《软件质量保护与测试》(第2版)第十三章的学习总结,介绍了集成测试的概念、主要任务、测试层次与原则,以及集成测试的不同策略,包括非渐增式集成和渐增式集成(自顶向下和自底向上),并通过图示详细解释了集成测试的过程。
10 1
软件质量保护与测试(第2版)学习总结第十三章 集成测试
|
25天前
|
Ubuntu jenkins 测试技术
软件测试中的自动化与持续集成实践
【9月更文挑战第15天】在软件开发的快节奏世界中,自动化测试和持续集成(CI)已成为确保质量和效率的关键策略。本文旨在揭示如何通过实施自动化测试框架和CI流程来优化开发周期,减少人为错误,并加快产品上市时间。我们将探讨一些实用的工具和技术,以及它们如何帮助团队实现更流畅、更可靠的软件发布。
|
25天前
|
敏捷开发 jenkins Devops
软件测试的新篇章:自动化与持续集成的融合
【9月更文挑战第15天】在软件开发领域,质量保障始终是核心议题。随着敏捷开发的普及和DevOps文化的兴起,自动化测试和持续集成(CI)已成为现代软件工程不可或缺的组成部分。本文将深入探讨自动化测试的重要性、实施策略以及如何将其无缝集成到CI流程中,以实现更高效、更稳定的软件开发周期。通过具体案例分析,我们将揭示自动化测试和CI如何相互促进,提升软件交付的速度和质量。
|
28天前
|
监控 安全 测试技术
提升软件测试效率:探索持续集成的最佳实践
在现代软件开发过程中,持续集成(CI)已成为提高软件质量和测试效率的关键实践。通过将代码库的每次提交自动构建和测试,CI 帮助团队及时发现问题,减少手动测试的负担。本文探讨了如何有效实施持续集成来优化软件测试流程,并提供了一些实用的策略和工具建议,以帮助开发团队更高效地运作。
52 2
|
2月前
|
Java jenkins Shell
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
|
2月前
|
jenkins 持续交付
jenkins学习笔记之六:共享库方式集成构建工具
jenkins学习笔记之六:共享库方式集成构建工具
|
2月前
|
测试技术 Java Spring
Spring 框架中的测试之道:揭秘单元测试与集成测试的双重保障,你的应用真的安全了吗?
【8月更文挑战第31天】本文以问答形式深入探讨了Spring框架中的测试策略,包括单元测试与集成测试的有效编写方法,及其对提升代码质量和可靠性的重要性。通过具体示例,展示了如何使用`@MockBean`、`@SpringBootTest`等注解来进行服务和控制器的测试,同时介绍了Spring Boot提供的测试工具,如`@DataJpaTest`,以简化数据库测试流程。合理运用这些测试策略和工具,将助力开发者构建更为稳健的软件系统。
40 0
|
2月前
|
测试技术 持续交付 开发者
Xamarin 高效移动应用测试最佳实践大揭秘,从框架选择到持续集成,让你的应用质量无敌!
【8月更文挑战第31天】竞争激烈的移动应用市场,Xamarin 作为一款优秀的跨平台开发工具,提供了包括单元测试、集成测试及 UI 测试在内的全面测试方案。借助 Xamarin.UITest 框架,开发者能便捷地用 C# 编写测试案例,如登录功能测试;通过 Xamarin 模拟框架,则可在无需真实设备的情况下模拟各种环境测试应用表现;Xamarin.TestCloud 则支持在真实设备上执行自动化测试,确保应用兼容性。结合持续集成与部署策略,进一步提升测试效率与应用质量。掌握 Xamarin 的测试最佳实践,对确保应用稳定性和优化用户体验至关重要。
48 0
|
2月前
|
测试技术 Java
全面保障Struts 2应用质量:掌握单元测试与集成测试的关键策略
【8月更文挑战第31天】Struts 2 的测试策略结合了单元测试与集成测试。单元测试聚焦于单个组件(如 Action 类)的功能验证,常用 Mockito 模拟依赖项;集成测试则关注组件间的交互,利用 Cactus 等框架确保框架拦截器和 Action 映射等按预期工作。通过确保高测试覆盖率并定期更新测试用例,可以提升应用的整体稳定性和质量。
62 0