当前位置: 首页 > news >正文 东莞做网站的建设部招标网 官方网站 news 2025/11/3 10:03:41 东莞做网站的,建设部招标网 官方网站,企业网站功能报价,江门网站优化快速排名1. 概念 在进行单元测试时#xff0c;特别是针对使用了Spring框架的应用程序#xff0c;我们通常需要与Spring容器交互以获取被测试对象及其依赖。传统做法是在每个测试方法中手动创建Spring容器并从中获取所需的Bean。以下面的两行常见代码为例#xff1a; ApplicationCo… 1. 概念 在进行单元测试时特别是针对使用了Spring框架的应用程序我们通常需要与Spring容器交互以获取被测试对象及其依赖。传统做法是在每个测试方法中手动创建Spring容器并从中获取所需的Bean。以下面的两行常见代码为例 ApplicationContext context new ClassPathXmlApplicationContext(xxx.xml); Xxxx xxx context.getBean(Xxxx.class); 这段代码做了两件事 创建Spring容器使用 ClassPathXmlApplicationContext 类的构造函数创建一个Spring容器实例。这个构造函数接受一个字符串参数即Spring配置文件通常是XML格式的路径。在这个例子中配置文件名为 xxx.xml位于类路径classpath下。ClassPathXmlApplicationContext 是Spring众多容器实现之一它能从类路径加载XML配置文件并据此创建和管理Bean。从容器中获取Bean调用容器实例context的 getBean 方法传入想要获取的Bean的类型或名称这里是 Xxxx.class。getBean 方法会查找并返回与指定类型或名称匹配的Bean实例。这样我们就得到了需要测试的 Xxxx 类的实例。 然而每次编写单元测试时都重复这两行代码不仅显得冗余还增加了维护成本。尤其是在大型项目中可能会有多个测试类需要与Spring容器交互重复的容器创建和Bean获取逻辑会使测试代码变得复杂且不易管理。 为了解决这个问题Spring提供了与JUnit的集成方案允许我们在不手动创建容器的情况下让测试框架自动处理Spring容器的创建和Bean的注入。具体而言Spring提供了一个运行器Runner如 SpringJUnit4ClassRunner 或更新的 SpringExtension对于JUnit 5这些运行器可以配合特定的注解如 ContextConfiguration来指示测试框架使用哪个配置文件或注解配置类来初始化Spring容器。 以下是使用Spring整合JUnit后的简化测试代码示例 RunWith(SpringJUnit4ClassRunner.class) // 或 ExtendWith(SpringExtension.class) for JUnit 5 ContextConfiguration(locations {classpath:xxx.xml}) public class XxxxTest {Autowiredprivate Xxxx xxx; // 直接注入待测试的BeanTestpublic void testSomeMethod() {// 在这里直接使用注入的xxx对象进行测试无需手动创建容器和获取Bean// ...} } 通过这种方式 使用 RunWith 或 ExtendWith 注解指定Spring提供的运行器告知JUnit使用Spring的方式来运行测试。使用 ContextConfiguration 注解指定了Spring配置文件的位置同样可以是注解配置类现在无需在测试代码中显式创建 ApplicationContext。利用 Autowired 注解直接在测试类的字段上声明需要注入的BeanSpring会在容器初始化后自动将对应的Bean注入到该字段。 如此一来可以简单理解为 以前每次编写单元测试时都需要手动创建Spring容器并从中获取被测试对象。这既繁琐又容易出错。 现在通过集成Spring与JUnit我们可以利用Spring提供的运行器和注解来自动化容器创建和Bean注入过程。测试类只需关注具体的测试逻辑无需关心容器管理细节代码更加简洁、易于维护。 2. JUnit4 JUnit5 JUnit4 和 JUnit5 都是帮助Java程序员写单元测试的工具。简单来说 JUnit4 是一款很老但很经典的单元测试框架。它使用注解比如 Test、Before、After来标记测试方法和设置测试前后的操作。你写好测试代码然后JUnit4帮你运行这些测试告诉你哪些通过了哪些失败了。它还有断言方法如 assertEquals让你检查程序的实际输出是否符合预期。 JUnit5 是JUnit家族的最新版本比JUnit4更新、更强大。它继承了JUnit4的好东西如注解但改进了很多地方让写测试变得更方便、更灵活 新特性JUnit5添加了更多有用的注解如 BeforeEach、AfterEach、DisplayName让测试代码更易读、更结构化。还支持参数化测试一个测试方法跑多种输入情况条件执行测试以及嵌套测试测试里面套测试。更好兼容JUnit5全面支持现代Java版本如Java 8及以上能用到Lambda表达式、Stream等新特性。它还自带一个平台不仅能跑JUnit5的测试还能跑JUnit4甚至其他测试框架的测试。更强大扩展JUnit5提供了扩展机制Extension API让你可以更方便地定制测试行为比如控制测试环境、模拟依赖、自定义报告等。这比JUnit4的“规则”更强大、更易于使用。 所以如果你刚开始学习写Java单元测试直接学JUnit5是个不错的选择因为它是最新的、功能最全的。如果你看到一些旧代码还在用JUnit4也不用担心大部分基础知识是相通的而且JUnit5也能很好地兼容运行JUnit4的测试。 3. 整合JUnit5 beans.xml ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdcontext:component-scan base-packagecom.sakurapaid.spring6.bean/ /beans 3.1. 搭建子模块 创建一个名为 spring-junit 的子模块用于存放相关的测试代码和配置。 3.2. 引入依赖 在子模块的构建文件如pom.xml或build.gradle中添加必要的依赖项 dependencies!--spring context依赖--!--当你引入Spring Context依赖之后表示将Spring的基础依赖引入了--dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion6.0.2/version/dependency!--spring对junit的支持相关依赖--dependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion6.0.2/version/dependency!--junit5测试--dependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter-api/artifactIdversion5.9.0/version/dependency!--log4j2的依赖--dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion2.19.0/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j2-impl/artifactIdversion2.19.0/version/dependency /dependencies Spring Context提供Spring的核心功能如依赖注入DI、AOP等是使用Spring进行应用开发的基础。Spring Test包含了Spring对单元测试和集成测试的支持其中包含与JUnit5集成的SpringJUnit5ClassRunner等工具。JUnit Jupiter APIJUnit5的核心API包包含编写单元测试所需的基本注解和断言。Log4j2一个流行的日志框架以及与SLF4JSimple Logging Facade for Java适配的实现用于记录和管理测试过程中的日志信息。 3.3. 添加配置文件 创建一个名为 beans.xml 的Spring配置文件内容如下 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd!-- 扫描指定包下的Component、Service、Repository、Controller等注解标记的类 --context:component-scan base-packagecom.sakurapaid.spring6.bean//beans 此配置文件中context:component-scan 标签用于自动扫描指定包com.atguigu.spring6.bean下的带有Spring组件注解如Component的类并将其注册为Spring管理的Bean。 同时复制一个名为 log4j2.xml 的日志配置文件到项目中用于配置Log4j2的日志记录行为。 3.4. 添加Java类 创建一个名为 User 的Java类使用 Component 注解标记表示这是一个由Spring管理的Bean package com.sakurapaid.spring6.bean;import org.springframework.stereotype.Component;/*** User类说明* 本类用于示例Spring Bean的声明。* Component注解用于标记一个类作为Spring的组件使得该组件可以被Spring的组件扫描器识别并加入到Spring的IoC容器中。*/ Component public class User {/*** User类的构造函数* 该构造函数在实例化User对象时会自动执行用于执行一些初始化操作。*/public User() {System.out.println(run user);} } 当Spring容器初始化时会发现并创建这个带有 Component 注解的 User 类的实例。 3.5. 测试 编写一个JUnit5测试类 SpringJUnit5Test通过Spring与JUnit5的集成来测试 User 类 package com.sakurapaid.spring6.test;import com.sakurapaid.spring6.bean.User; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;// 方式一使用ExtendWith和ContextConfiguration注解 ExtendWith(SpringExtension.class) ContextConfiguration(classpath:bean.xml)// 方式二使用SpringJUnitConfig注解推荐 //SpringJUnitConfig(locations classpath:bean.xml) public class SpringJUnit5Test {Autowiredprivate User user;Testpublic void testUser(){System.out.println(user);} } 测试类中 SpringJUnitConfig 或 ExtendWith(SpringExtension.class) ContextConfiguration这两种方式都是用来集成Spring与JUnit5的。前者是更简洁的组合注解后者则是分别使用注解来指定Spring测试扩展和配置文件位置。它们的作用都是让Spring在测试运行前加载配置文件创建Spring容器并根据容器来管理测试类中的Bean。Autowired用于自动注入 User 类的实例。由于 User 类已被Spring管理所以在测试类中可以通过 Autowired 注解来直接注入其实例无需手动创建。TestJUnit5的测试方法注解表示该方法是一个单元测试。 测试方法 testUser() 中打印出注入的 user 实例。当运行此测试时Spring容器会先被创建User 类的实例会被自动注入到测试类中然后执行测试方法打印出 User 实例的信息。 总结这个示例展示了如何使用JUnit5编写单元测试并通过Spring的配置文件和注解来管理测试所需的Bean。测试类借助Spring与JUnit5的集成能够便捷地访问被测试对象及其依赖从而专注于测试逻辑本身。同时还配置了Log4j2用于记录测试过程中的日志信息。 方式一使用 ExtendWith 和 ContextConfiguration 注解 这是JUnit5早期集成Spring的一种方式通过两个单独的注解来完成 ExtendWith(SpringExtension.class) 这是一个JUnit5的通用扩展机制注解用于指定一个或多个测试扩展Extension这些扩展能够参与到测试的生命周期管理中添加额外的功能。SpringExtension 是Spring专门为JUnit5提供的扩展实现它负责在测试运行前启动Spring容器将Spring的依赖注入和AOP等功能与JUnit5测试框架结合起来。使用 ExtendWith(SpringExtension.class) 注解意味着在运行此测试类时JUnit5会调用 SpringExtension 来处理与Spring相关的部分。 ContextConfiguration(classpath:beans.xml) 这是Spring Test提供的注解用于指定Spring容器的配置来源。在这里它指定了一个类路径下的XML配置文件 beans.xml。当 SpringExtension 在运行测试时启动Spring容器它会根据 ContextConfiguration 注解提供的信息加载配置文件创建并初始化Spring容器。有了这个配置Spring容器就知道如何创建、装配和管理测试所需的Bean包括那些被 Autowired 注解的字段。 方式二使用 SpringJUnitConfig 注解推荐 SpringJUnitConfig 是Spring Test为JUnit5专门提供的一个组合注解它整合了上述两种方式的功能使得集成Spring更加简洁 SpringJUnitConfig(locations classpath:beans.xml) 这是一个单一注解它同时包含了 ExtendWith(SpringExtension.class) 和 ContextConfiguration(classpath:beans.xml) 的功能。使用 SpringJUnitConfig您只需要指定Spring配置文件的位置如 classpath:beans.xml而不必分别使用 ExtendWith 和 ContextConfiguration。这样做的好处是代码更简洁易于阅读和理解同时也避免了重复指定Spring扩展和配置源。 方式一 是通过分别使用 ExtendWith(SpringExtension.class) 和 ContextConfiguration(classpath:beans.xml) 注解来集成Spring与JUnit5。方式二 则是使用更简洁的 SpringJUnitConfig(locations classpath:beans.xml) 注解它合并了前两种注解的功能是更推荐的集成方式。两者的目的都是启动Spring容器加载指定的配置以便在JUnit5测试中利用Spring的依赖注入和管理功能。对于初学者来说直接使用 SpringJUnitConfig 会更加直观和简便。 4. 整合JUnit4 JUnit4在公司也会经常用到在此也学习一下 4.1. 添加依赖 !-- junit测试 -- dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/version /dependency 4.2. 测试 编写一个JUnit4测试类 SpringJUnit4Test通过Spring与JUnit4的集成来测试 User 类 import com.atguigu.spring6.bean.User; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(classpath:beans.xml) public class SpringJUnit4Test {Autowiredprivate User user;Testpublic void testUser(){System.out.println(user);} } 测试类中 RunWith(SpringJUnit4ClassRunner.class) 这是一个JUnit4特有的注解用于指定测试类的运行器Runner。SpringJUnit4ClassRunner 是Spring为JUnit4提供的特殊运行器它能在运行测试之前启动Spring容器将Spring的依赖注入等功能与JUnit4测试框架结合。使用 RunWith(SpringJUnit4ClassRunner.class)意味着在运行此测试类时JUnit4会使用 SpringJUnit4ClassRunner 而不是默认的 JUnit4ClassRunner从而启用Spring容器支持。 ContextConfiguration(classpath:beans.xml) 这同样是Spring Test提供的注解用于指定Spring容器的配置来源。在这里它指定了一个类路径下的XML配置文件 beans.xml。当 SpringJUnit4ClassRunner 启动Spring容器时它会根据 ContextConfiguration 注解提供的信息加载配置文件创建并初始化Spring容器。有了这个配置Spring容器就知道如何创建、装配和管理测试所需的Bean包括那些被 Autowired 注解的字段。 Autowired 用于自动注入 User 类的实例。由于 User 类已被Spring管理所以在测试类中可以通过 Autowired 注解来直接注入其实例无需手动创建。 Test JUnit4的测试方法注解表示该方法是一个单元测试。 测试方法 testUser() 中打印出注入的 user 实例。当运行此测试时Spring容器会先被创建User 类的实例会被自动注入到测试类中然后执行测试方法打印出 User 实例的信息。 总结这个示例展示了如何使用JUnit4编写单元测试并通过Spring的配置文件和注解来管理测试所需的Bean。测试类借助Spring与JUnit4的集成能够便捷地访问被测试对象及其依赖从而专注于测试逻辑本身。与JUnit5相比JUnit4的集成方式使用了不同的注解如 RunWith但基本思路是一致的启动Spring容器加载配置注入依赖然后执行测试。 文章转载自: http://www.morning.msgcj.cn.gov.cn.msgcj.cn http://www.morning.bkppb.cn.gov.cn.bkppb.cn http://www.morning.lcxzg.cn.gov.cn.lcxzg.cn http://www.morning.btwrj.cn.gov.cn.btwrj.cn http://www.morning.tjwlp.cn.gov.cn.tjwlp.cn http://www.morning.hxwrs.cn.gov.cn.hxwrs.cn http://www.morning.kcxtz.cn.gov.cn.kcxtz.cn http://www.morning.rbqlw.cn.gov.cn.rbqlw.cn http://www.morning.xqgtd.cn.gov.cn.xqgtd.cn http://www.morning.drywd.cn.gov.cn.drywd.cn http://www.morning.btjyp.cn.gov.cn.btjyp.cn http://www.morning.jjhng.cn.gov.cn.jjhng.cn http://www.morning.xinxianzhi005.com.gov.cn.xinxianzhi005.com http://www.morning.xfrqf.cn.gov.cn.xfrqf.cn http://www.morning.mlhfr.cn.gov.cn.mlhfr.cn http://www.morning.cbnxq.cn.gov.cn.cbnxq.cn http://www.morning.qineryuyin.com.gov.cn.qineryuyin.com http://www.morning.rpwm.cn.gov.cn.rpwm.cn http://www.morning.rgpsq.cn.gov.cn.rgpsq.cn http://www.morning.wspjn.cn.gov.cn.wspjn.cn http://www.morning.lxfqc.cn.gov.cn.lxfqc.cn http://www.morning.twfdm.cn.gov.cn.twfdm.cn http://www.morning.qsy39.cn.gov.cn.qsy39.cn http://www.morning.daxifa.com.gov.cn.daxifa.com http://www.morning.txgjx.cn.gov.cn.txgjx.cn http://www.morning.rbffj.cn.gov.cn.rbffj.cn http://www.morning.yfnjk.cn.gov.cn.yfnjk.cn http://www.morning.cwtrl.cn.gov.cn.cwtrl.cn http://www.morning.rwrn.cn.gov.cn.rwrn.cn http://www.morning.hzryl.cn.gov.cn.hzryl.cn http://www.morning.lprfk.cn.gov.cn.lprfk.cn http://www.morning.npfkw.cn.gov.cn.npfkw.cn http://www.morning.sjjq.cn.gov.cn.sjjq.cn http://www.morning.sfqtf.cn.gov.cn.sfqtf.cn http://www.morning.bzqnp.cn.gov.cn.bzqnp.cn http://www.morning.rfdqr.cn.gov.cn.rfdqr.cn http://www.morning.qrqcr.cn.gov.cn.qrqcr.cn http://www.morning.pwsnr.cn.gov.cn.pwsnr.cn http://www.morning.grwgw.cn.gov.cn.grwgw.cn http://www.morning.ytbr.cn.gov.cn.ytbr.cn http://www.morning.hrypl.cn.gov.cn.hrypl.cn http://www.morning.pmsl.cn.gov.cn.pmsl.cn http://www.morning.ctbr.cn.gov.cn.ctbr.cn http://www.morning.tsyny.cn.gov.cn.tsyny.cn http://www.morning.kmkpm.cn.gov.cn.kmkpm.cn http://www.morning.kpnpd.cn.gov.cn.kpnpd.cn http://www.morning.rqmr.cn.gov.cn.rqmr.cn http://www.morning.khpx.cn.gov.cn.khpx.cn http://www.morning.qyhcg.cn.gov.cn.qyhcg.cn http://www.morning.rdsst.cn.gov.cn.rdsst.cn http://www.morning.gwsdt.cn.gov.cn.gwsdt.cn http://www.morning.rjrz.cn.gov.cn.rjrz.cn http://www.morning.pjwml.cn.gov.cn.pjwml.cn http://www.morning.dqcpm.cn.gov.cn.dqcpm.cn http://www.morning.qwdqq.cn.gov.cn.qwdqq.cn http://www.morning.rahllp.com.gov.cn.rahllp.com http://www.morning.hyryq.cn.gov.cn.hyryq.cn http://www.morning.klzt.cn.gov.cn.klzt.cn http://www.morning.liyixun.com.gov.cn.liyixun.com http://www.morning.chfxz.cn.gov.cn.chfxz.cn http://www.morning.aiai201.cn.gov.cn.aiai201.cn http://www.morning.qpxrr.cn.gov.cn.qpxrr.cn http://www.morning.pgzgy.cn.gov.cn.pgzgy.cn http://www.morning.zlwg.cn.gov.cn.zlwg.cn http://www.morning.lxqyf.cn.gov.cn.lxqyf.cn http://www.morning.phechi.com.gov.cn.phechi.com http://www.morning.jbctp.cn.gov.cn.jbctp.cn http://www.morning.bksbx.cn.gov.cn.bksbx.cn http://www.morning.phxdc.cn.gov.cn.phxdc.cn http://www.morning.nwtmy.cn.gov.cn.nwtmy.cn http://www.morning.qlry.cn.gov.cn.qlry.cn http://www.morning.tbhlc.cn.gov.cn.tbhlc.cn http://www.morning.jftl.cn.gov.cn.jftl.cn http://www.morning.mqlsf.cn.gov.cn.mqlsf.cn http://www.morning.krywy.cn.gov.cn.krywy.cn http://www.morning.pxspq.cn.gov.cn.pxspq.cn http://www.morning.rczrq.cn.gov.cn.rczrq.cn http://www.morning.wknjy.cn.gov.cn.wknjy.cn http://www.morning.glswq.cn.gov.cn.glswq.cn http://www.morning.gjqgz.cn.gov.cn.gjqgz.cn 查看全文 http://www.tj-hxxt.cn/news/273429.html 相关文章: 大理网上商城网站建设海口网站建设哪家最好 一个网站多大深圳网站建站建设公司地址 高校后勤网站建设要求及内容成都建网站的公司 网站建设与管理试卷A建设网站的公司排名 seo网站建设 刘贺稳营销专家a手机兼职在家挣钱的方法 上饶哪有做网站的公司?google关键词优化 wordpress 建站 教程视频wordpress 开启rss 免费的网站域名江西省城乡建设厅网站证件查询 菜鸟学做网站在哪个网站上做推广作用好 三网合一网站开发河北邢台最新消息今天 怀化建设局网站网站开发软件启动 wordpress站长统计插件有口碑的网站建设公司 毕节市建设网站grace8WordPress主题 南京做企业网站公司上海的广告公司网站建设 广告网站怎么做wordpress.安装 电子商务网站建设类论文文明网站建设培训体会 台州制作网站软件电脑网游 如何搭建高品质网站备案的网站是公司吗 付费推广网站扁平化 网站 自己做模板网站河源网站制作 销售app软件大概需要多少钱seo服务 收费 如何做中英切换的网站推广平台哪个好 网站付款接口这么做网站建设公告 昆山网站推广网站后台统计代码 做文案策划有些网站可看网址地址查询域名 网站发文超链接怎么做境外网站icp备案 住房和城乡建设部网站一级建造师win10部署wordpress 汽车网站开发与实现 论文wordpress 收费阅读 网站建设 国家标准免费软件下载网站 留言网站怎么做wordpress编辑文字内容