测试动态 / 质量专栏 /弹簧测试完整指南
弹簧测试完整指南
2022-04-29 浏览次数:84

软件测试是软件开发生命周期中不可协商的方面。设置并继续进行软件测试可能是一项乏味的任务。您或您的团队可能会在设计测试策略或选择测试框架时感到困惑。然而,主要障碍要么与方法论或框架有关。本文围绕如何对Spring 应用程序进行测试。

Spring Framework 支持您的整个测试生态系统。Spring 框架最符合软件开发的敏捷方法。由于敏捷方法为开发人员和测试人员执行单元测试提供了更好的环境,这个基于 Java 的框架为其增添了亮点。Spring 还为集成测试提供了出色的支持。

在本文中,我们将探索 Spring 框架以及如何测试使用 Spring 和 Spring Boot 框架构建的应用程序。

什么是 Spring 框架?

Spring 是一个基于 Java 的开源框架。由 Rod Johnson 于 2003 年 6 月发布,Spring 框架的主要目的是为 Java 应用程序提供基础设施支持。它还消除了在测试基于 Java 的容器内应用程序时出现的各种障碍。

Spring 作为一个框架是一组完整的代码和类,开发人员和测试人员可以使用它们来解决 Java 特定的问题和测试它们的限制。在 Spring 框架中,您不需要创建特定于 Spring 的单独类。这使您可以避免依赖 Spring 框架。因此,Spring 也被称为非侵入式框架。

但是,您仍然可以创建特定于 Spring 的类,例如 JNDITemplate、JDBCTemplate 等。因此,Spring 成为测试容器内应用程序需求的整体解决方案。

Spring 框架是如何工作的?

基于 JAVA EE 的程序通常非常复杂并且涉及繁重的组件。重,我的意思是组件取决于当前的操作系统。这使得应用程序代码相互依赖。用于这种情况的术语是 – 紧密耦合,即应用程序代码彼此紧密耦合。这是不使用 Spring Framework 的时候。

Spring的主要武器,或者说Spring最关键的逻辑,是——依赖注入。这解决了紧密耦合架构的问题,因为它使应用程序代码解耦。依赖注入的全部含义是创建这样一种模式,进而创建解耦架构。

Spring 框架还可以帮助您解决基于方法论或框架的测试问题。它可以帮助您满足以下测试需求。这些也被称为 Spring Framework 的特性——

隔离

如果不连接到相应的数据库,您的 J2EE 应用程序可能不支持隔离测试。但是,您可以通过接种模拟实现测试来使用 Spring 框架执行隔离测试。例如 – 假设您有一个依赖于域类的服务类。Spring 允许您隔离该服务类并执行测试,而无需担心数据库连接和域依赖关系。

数据访问

如果您有无法解决的依赖关系,您将始终可以选择求助于 Spring 辅助类。这些增加了对 Spring 框架的依赖,但可以为您提供数据访问层次结构的解决方法。您可以使用 JdbcTemplate、TopLinkTemplate 等辅助类模板。

事务管理

Spring 为您提供出色的支持来跟踪和管理本地和全局事务。一个抽象框架在 Spring 中实现了这一点。这个抽象框架提供了广泛的事务管理,从声明式到程序化。

此外,Spring 框架为单元和集成测试提供了出色的支持(正如我们之前所讨论的)。

没有 Spring 框架的软件测试策略和限制

让我们首先了解它们到底是什么框架相关的块。让我们假设您的项目按照敏捷方法进展顺利,并且大部分工作都基于 J2EE 架构模型。软件测试主要基于单元测试和回归测试。尤其是单元测试,对于获得高代码覆盖率非常重要,而这在 J2EE 架构中是无法执行的。

为什么这样?因为应用服务器容器是 J2EE 运行时环境的核心。这使得执行单元测试变得困难,单元测试需要在容器外执行。因此,要彻底测试和覆盖基于 J2EE 的应用程序,有必要将其部署在容器内。这里还有另一个问题——容器内软件测试会扼杀生产力。它会延长并且会严重影响项目周期的时间表。

不过,无需担心。这个框架相关的块可以通过考虑框架 Spring 来轻松解决。Spring是一个基于Java企业的应用程序开发框架。它有可能支持您的软件的单元测试和集成测试。事实上,使用 Spring 框架进行软件测试的主要动机是按照敏捷策略使单元测试的过程更加顺畅。

让我们首先了解软件测试类型 -

单元测试

让我们继续看一个简单的例子——考虑一段 1000 多行的 JAVA 代码。首先,这违反了 SRP(单一责任原则),即代码模块应该只处理一个功能。这就像软件开发中应用的分而治之原则。

无论如何,无论是否违反原则,您现在都有此代码。你打算如何进行单元测试?对这个扩展代码进行单元测试并确保正确的覆盖范围变得很复杂。没有单元测试的定义——

单元测试是一个软件开发过程,其中软件、应用程序或代码单元的单元被独立测试以确保正常工作和预期结果。在单元测试中,代码和功能被隔离以确保准确的操作。

单元测试也有利于对现有代码的新更改或方法进行快速测试。手动单元测试由开发人员在项目的早期阶段完成,并且在后期阶段也节省了大量的时间和精力。

单元测试是测试驱动开发的重要组成部分,分为三个阶段:

  1. 计划:准备单元测试和审查。

  2. 设计:制作测试用例和脚本。

  3. 测试:代码经过单元测试。

最流行的单元测试框架之一是 JUnit。在 JUnit 中,您可以使用 Mock Objects 并使用 new 关键字初始化对象。您也无需担心容器内资源、JDBC 连接池、JNDI 等。模拟对象测试技术可以轻松执行独立的单元测试。

集成测试

集成在一起的测试模块对于单独测试它们至关重要。如果一个类或模块单独运行良好,它并不能保证与其他模块组合或集成时的完美结果。因此,需要进行集成测试。集成测试是一种将特定模块和类与作为完整功能进行测试的测试类型。

像这样理解 - 一个开发团队开发您项目的不同功能和模块。每个开发人员都致力于不同的功能并开发不同的模块(敏捷软件开发方法)。在单元测试中,我们单独测试这些单独的模块。集成测试的目的是确保这些不同的模块在组合或合并时是否正常工作。

集成测试测试用例主要设计用于关注模块之间发生的交互。由于已经在单元测试中测试了各个功能,因此集成测试会测试这些各个功能和模块之间的链接。也可以将集成测试视为单元测试的补充。

回归测试

当任何代码更改或将软件包部署到生产环境时,这种测试实践就会出现。这确保了完整的功能按预期工作。最好将其视为验证整个产品功能的最后一步。

软件开发生命周期中包含了更多的测试策略。例如 -

  • 负载测试:这些测试验证了所提议软件的可扩展性。

  • 数据库测试:这些测试确保数据访问级别是否按预期工作并确保数据完整性。

  • 分析:这些测试确保正确的垃圾收集并检测任何内存泄漏。

尽管非常有用,但所有这些测试方法可能会或可能不会在特定环境中工作。例如——基于 J2EE 架构的应用程序需要特定的框架来支持不同形式的测试。在本文中,我们将讨论如何执行 Spring 测试。

使用 Spring 框架进行 Spring 测试

下面展示了如何使用 Spring 框架运行 Spring Web 测试。

使用 Spring 框架进行单元测试

如果你遵循标准的 Spring Framework 架构,依赖注入和 Mock Objects 的使用可以让单元测试对你来说超级方便。使用 Mock Objects 可以很容易地测试单个代码和模块,即隔离测试。

通常,单元测试执行速度很快,因此无需设置任何运行时架构。Spring 测试通过提供测试支持类和模拟对象为这些添加了月亮。Spring 有几个包来支持模拟对象,如 JNDI、Servlet API 等。

单元测试的测试支持类

Spring Framework 中的单元测试支持类分为以下两类——

  1. 通用测试工具

  2. Spring MVC 测试工具

对于通用测试实用程序,您可以获得 org.Springframework.test.util 包。该软件包提供了多个通用测试实用程序,您可以在单元和集成测试中使用它们。这个包考虑了你在编写单元测试类时可能遇到的所有场景。例如 -

ReflectionTestUtils:它是一种基于反射的方法,用于需要使用常量值、调用或设置非公共方法或使用回调方法的场景。

现在对于 Spring MVC 测试实用程序,您将使用包含 ModelAndViewAssert 方法的 org.Springframework.test.web 包。这可以与 JUnit 一起使用来执行包含 ModelAndView 对象的单元测试。

使用 Spring Framework 进行集成测试

Spring 框架中的 Spring-test 模块为集成测试提供了极好的支持。连接到另一个基础架构或需要部署到应用程序服务器的痛苦很大。

建议的 Spring-test 模块可以帮助您克服这种痛苦。它包括为集成测试提供各种必要类的 org.Springframework.test 包。

Spring 提供的集成测试支持具有以下目标-

  1. 管理测试之间的 Spring IoC 容器缓存。

  2. 管理特定于 Spring 框架的基本测试类的供应。

  3. 提供和管理依赖注入。

使用 Spring 框架的集成测试可以像 JUnit 测试一样执行。集成测试包括集成级别的测试,而不是孤立的测试。因此,它们通常较慢。但是在使用 Spring 框架时,NO!他们不是。

org.Springframework.test 包中存在的特定于 Spring 的集成测试类几乎涵盖了每个角落。

以下是该包中 Spring 框架提供的一些基础集成测试类——

测试班

在职的

AbstractJpaTests

此类测试 JPA 功能并提供一个名为 EntityManager 的实例,该实例可用于调用这些 JPS 方法。

AbstractModelAndViewTests

该类用于测试应用程序中的两个层,即表示层和控制器层。

AbstractAspectJpa测试

由 AnstractJpaTests 类扩展,可以执行 LTW(Load-time weaving)。

使用 Spring Boot 进行 Spring 测试

使用 Spring Framework,运行 Spring Web 测试变得更加容易,并且在 Spring Boot 生效时更加高效。Spring boot 是一个基于 Spring 的框架,与 Spring 本身相比,它允许更少的依赖项和更快的引导。它提供了大量用于执行单元和集成测试的功能。Spring-boot-test 模块和 Spring-boot-test-autoconfigure 配置帮助您运行 Spring boot 应用程序测试。

您可以使用以下支持库来拉取所需的测试依赖项 -

JUnit:这可能是您将掌握的最好的单元测试框架之一。它为您提供了一个全方位的测试环境,尤其适用于开发者端测试。Junit 是一个基于 java 的测试框架,在测试驱动的开发周期中创造了奇迹。

Mockito:顾名思义,它是一个 Java 模拟框架。

JSONassert:这个支持库帮助编写基于 JSON 的单元测试用例。

Spring Test:为集成测试提供支持的实用程序。

Spring Boot 为编写和执行 Spring Boot Web 测试提供了全面的支持。从在测试类中使用的注释到单独的测试特定要求,它为您提供了一切。你想要一个例子吗?开始了 -

要继续测试功能,您需要导入 org.Spring boot.app 包。您还可以使用 @SpringBootTest 注解。此注解通常与@RunWith(SpringRunner.class) 一起使用。这些相关联地加载应用程序上下文和更多幕后需求。但是,@SpringBootTest 不会自行初始化服务器。为此,您需要使用模拟环境。

这是用于测试 Spring Boot 应用程序的代码片段 -

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package org.Springboot.app;

import static org.Springframework.test.web.servlet

   .request.MockMvcRequestBuilders.*;

import org.junit.*;

import org.junit.runner.RunWith;

import org.Springboot.app.controller.*;

import org.Springframework.boot.test.autoconfigure.

   web.servlet.AutoConfigureMockMvc;

import org.Springframework.boot.test.context.SpringBootTest;

import org.Springframework.test.context.junit4.SpringRunner;

import org.Springframework.test.web.servlet.MockMvc;

import org.Springframework.test.web.servlet

   .setup.MockMvcBuilders;


@RunWith(SpringRunner.class)

@SpringBootTest

@AutoConfigureMockMvc // Mock environment

public class ApplicationTestingClass {

上面的代码片段一定让您清楚地了解如何使用 Spring-boot 注释编写测试类。尽管听起来很复杂,但 Spring 测试相当容易。由于您可以选择集成多个框架和实用程序,因此 Spring 测试(单元和集成测试)变得容易,并且可以在容器内应用程序中执行并获得准确的结果。

结论

在这篇关于 Spring 测试的文章中,您对 Spring 测试是什么、它如何帮助框架相关的阻止程序以及执行应用程序的 Spring 测试所需的所有步骤有了基本的了解。

常见问题 (FAQ)

什么是 Spring Boot 测试?

为了测试应用程序,Spring Boot 包含许多实用程序和注释。两个模块提供测试支持:spring-boot-test提供必要的组件,spring-boot-test-autoconfigure促进测试自动配置。

如何运行 Spring 测试?

您可以通过两个框架运行 Spring 测试:Spring 和 Spring boot。要执行 Spring Web 测试,您可以使用 LambdaTest 等基于云的平台跨 3000 多个真实浏览器和操作系统组合运行实时和自动化 Spring 测试。

Spring是否支持TestNG?

是的!org.springframework.test.context.testng包支持运行基于 TestNG 的测试套件的类。


卓码软件测评是一家[ 具备CMA、CNAS双重资质 ]的专业做软件测试的第三方软件测试服务机构, 可根据您的需求提供各类软件测试服务,并出具合格有效的软件测试报告。点击→→可了解测试报价

部分文字、图片来自网络,如涉及侵权,请及时与我们联系,我们会在第一时间删除或处理侵权内容。负责人:曾菲       电话:4006070568



文章标签: 跨浏览器测试 自动化测试
专业测试,找专业团队,请联系我们!
咨询测试报价 400-607-0568