1. Spring 对 Junit4,Junit5 的支持上的运用

@


每博一文案

关于理想主义,在知乎上看到一句话:“他们并不是不懂别人口中的现实,他们只是不信,事情只能是现在这个样子。”
错误的、肮脏的、混乱的、轻松自如的、自言尽力了,有人真的不懂么?为了利益和怠惰做出这样那样或好或坏的事情,什么动物都会。有人会开脱和找借口,说着现实就是如此啊,无力改变世界就改变自己啊。他们对现状摇摇头然后果断投入到漆黑的污水里去,义无反顾地。
但理想主义者是不信的,他们先是在语言上画一个大问号,再用行动画一个大叹号。
他先问你,怎么就非得这样不可?怎么就没了别的办法?然后再用做出来的事情告诉你,我告诉你就是还能有更干净、更温和、更有效的办法!
他们自己也有不能一尘不染的时候。但他们看着满目漆黑也不信世界上就没有洁白、干净这回事。
理想主义者就是不会相信生活和世界就是这样了。不管它是别人眼中的好,还是坏。
“一定有更好的办法,也能够通过合理的方式,缓慢地改善世界。愿意为了自己的理想而做些什么,甚至也愿意去牺牲什么。对于自己的手段、目的与认知,始终心怀疑问。即使做出的一切都看不到所谓的成效。即使这改变在活着的时候甚至也看不到。知道世界比较容易被忍受的这部分,是很多人用了很多代价换来的。但不会停下对好的东西的向往,还有向光明的地方行走的脚步。”
这才算理想主义者吧。往往是重视精神价值超过物质利益。理想主义者把对精神价值的追求看作人生的主要追求,这些精神价值包括:尊严、正义、爱、美等等。
而浪漫主义,诺瓦利斯说过:
“在我看来,把普通的东西赋予崇高的意义,给平凡的东西披上神秘的外衣,使熟知的东西恢复未知的尊严,对有限的东西给予无限的外观,这就是浪漫化。反过来说,这就是变得崇高、未知、神秘和无限的过程,通过这种联系,这一浪漫化过程就会被对数化。它得到一个常用的表达:浪漫哲学。”

2. Spring对Junit4 的支持

准备工作,先在pom.xml 文件当中,导入相关依赖的 jar 包信息,如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.rainbowsea</groupId>
<artifactId>spring6-015-junit</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging> <properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties> <!--仓库-->
<repositories>
<!--spring里程碑版本的仓库-->
<repository>
<id>repository.spring.milestone</id>
<name>Spring Milestone Repository</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories> <dependencies>
<!-- spring context 依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.11</version>
</dependency> <!-- spring 对 Junit 支持的依赖-->
<!--spring对junit的支持相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<!-- 这个版本spring6,既支持Junit4 又支持Junit5-->
<version>6.0.11</version>
</dependency> <!-- junit4依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency> <!-- @Resoure 注解 非简单类型的注入,赋值-->
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>2.1.1</version>
</dependency> </dependencies> </project>

准备好,对于的 Bean 对象用于测试:注意:需要将其 Bean 对象纳入到 Spring IOC 容器当中进行管理上。

package com.rainbowsea.spring6.bean;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; @Component(value = "user") // 交给 Spirng IOC 容器管理
public class User {
@Value("张三") // spring 当中 value()注解简单类型的,set注入,赋值
private String name; public User(String name) {
this.name = name;
} public User() {
} @Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

配置相关的:spring.xml 的配置信息的内容,这里我们用的是注解时开发,需要加上一个组件扫描

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 组件扫描-->
<context:component-scan base-package="com.rainbowsea.spring6.bean"></context:component-scan>
</beans>

单元测试:(一般平常的单元测试)如下:

上述:方式,代码重复率高,复用性较差。

Spring提供的方便主要是这几个注解:

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("classpath:spring.xml")注意该:spring.xml 文件要一定要在类路径下才行

在单元测试类上使用这两个注解之后,在单元测试类中的属性上可以使用 @Autowired。比较方便。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml") // 注意该:spring.xml 文件要一定要在类路径下才行

优化如下:

使用@Resource 需要导入相关的 jar 包,如下:

<!--        @Resoure 注解 非简单类型的注入,赋值-->
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>2.1.1</version>
</dependency>

同时注意:该Juit4的@ Test 的注解是在:org.junit.Test; 包下的

package com.rainbowsea.spring6.test;

import com.rainbowsea.spring6.bean.User;
import jakarta.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
public class SpringJunit4Test2 { @Resource(name = "user")
private User user; @Test
public void testUser() {
System.out.println(user.getName());
} @Test
public void testUser2() {
System.out.println(user.getName());
} @Test
public void testUser3() {
System.out.println(user.getName());
} }

3. Spring对Junit5的支持

引入JUnit5的依赖,Spring对JUnit支持的依赖还是:spring-test,同时换成,junit5 ,还是在 pom.xml 文件当值配置相关依赖的 jar 如下:

 <!--        junit5 依赖-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.0</version>
<scope>test</scope>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.rainbowsea</groupId>
<artifactId>spring6-015-junit</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging> <properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties> <!--仓库-->
<repositories>
<!--spring里程碑版本的仓库-->
<repository>
<id>repository.spring.milestone</id>
<name>Spring Milestone Repository</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories> <dependencies>
<!-- spring context 依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.11</version>
</dependency> <!-- spring 对 Junit 支持的依赖-->
<!--spring对junit的支持相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<!-- 这个版本spring6,既支持Junit4 又支持Junit5-->
<version>6.0.11</version>
</dependency> <!-- junit5 依赖-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.0</version>
<scope>test</scope>
</dependency> <!-- @Resoure 注解 非简单类型的注入,赋值-->
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>2.1.1</version>
</dependency> </dependencies> </project>

还是使用上面的 User 的 bean 对象进行测试:

在JUnit5当中,可以使用Spring提供的以下两个注解,标注到单元测试类上,这样在类当中就可以使用@Autowired注解了。

@ExtendWith(SpringExtension.class)
@ContextConfiguration("classpath:spring.xml") // 同样一定要是在类路径下

@ContextConfiguration("classpath:spring.xml") // 同样一定要是在类路径下

同时注意:该Juit5 的@ Test 的注解是在:org.junit.jupiter.api.Test 包下的 ,选择的时候不要,弄错了。

单元测试:

package com.rainbowsea.spring6.test;

import com.rainbowsea.spring6.bean.User;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension; @ExtendWith(SpringExtension.class)
@ContextConfiguration("classpath:spring.xml")
public class SpringJunit5Test { @Resource(name = "user") // 非简单类型的注入,赋值,交给Spring管理
private User user; @Test // import org.junit.jupiter.api.Test;
public void testUser() {
System.out.println(user.getName());
} @Test // import org.junit.jupiter.api.Test;
public void testUser2() {
System.out.println(user.getName());
} @Test // import org.junit.jupiter.api.Test;
public void testUser3() {
System.out.println(user.getName());
} }

4. 总结:

  1. Spring 对 Junit4 的依赖的 jar 包,同时
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml") // 注意该:spring.xml 文件要一定要在类路径下才行
  1. 同时注意:该Juit4的@Test 的注解是在:org.junit.Test; 包下的
  2. Spring 对 Junit5 的依赖的 jar 包,同时
@ExtendWith(SpringExtension.class)
@ContextConfiguration("classpath:spring.xml") // 同样一定要是在类路径下
  1. 无论是 Junit4 还是 Junit5 当中的 @ContextConfiguration 注解当中的 @ContextConfiguration("classpath:spring.xml") 都是:一定要是在类路径下才行的。
  2. 关于:Spring 对 Junit4,Junit5 的支持运用,大家灵活选择运用即可,并不是非要选择其中的哪个哪个啥的。满足业务即可。

5. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

Spring 对 Junit4,Junit5 的支持上的运用的更多相关文章

  1. spring 配置Value常量(不支持到static上)

    spring 配置Value常量(不支持到static上) 看代码吧,语言表达有问题. package com.variflight.xzair.rest.constant; import org.s ...

  2. web项目中 集合Spring&使用junit4测试Spring

    web项目中 集合Spring 问题: 如果将 ApplicationContext applicationContext = new ClassPathXmlApplicationContext(& ...

  3. Spring MVC 中的REST支持

    本部分提供了支持 RESTful web 服务的主要 Spring 功能(或注释)的概述. @Controller 使用 @Controller 注释对将成为 MVC 中控制器的类进行注释并处理 HT ...

  4. Spring读书笔记——bean创建(上)

    通过<Spring读书笔记--bean加载>和<Spring读书笔记--bean解析>,我们明白了两件事. Spring如何加载消化一个xml配置文件 Spring如何将xml ...

  5. 对spring 对持久层的支持和数据库连接池的理解

    1.spring对持久层的支持在于,得到数据库连接之后操作上的封装,将操作简化了.也就是说以后操作sql语句就用XXXTemplate(就是一个工具类)对象了. 2.数据库连接池的作用只在于得到数据库 ...

  6. 基于spring 3.0mvc 框架的文件上传实现

    Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框 ...

  7. Spring Boot中的缓存支持(一)注解配置与EhCache使用

    Spring Boot中的缓存支持(一)注解配置与EhCache使用 随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决 ...

  8. Spring Boot项目如何同时支持HTTP和HTTPS协议

    如今,企业级应用程序的常见场景是同时支持HTTP和HTTPS两种协议,这篇文章考虑如何让Spring Boot应用程序同时支持HTTP和HTTPS两种协议. 准备 为了使用HTTPS连接器,需要生成一 ...

  9. Spring 对Apache Kafka的支持与集成

    1. 引言 Apache Kafka 是一个分布式的.容错的流处理系统.在本文中,我们将介绍Spring对Apache Kafka的支持,以及原生Kafka Java客户端Api 所提供的抽象级别. ...

  10. 将Spring Boot项目运行在Docker上

    将Spring Boot项目运行在Docker上 一.使用Dockerfile构建Docker镜像 1.1Dockerfile常用指令 1.1.1ADD复制文件 1.1.2ARG设置构建参数 1.1. ...

随机推荐

  1. [洛谷P3961,TJOI2013]黄金矿工题解

    这无疑是一个分组背包问题,斜率是分组的依据,组内物品则是这个斜率下金块的价值与重量的前缀和. 发现很多人的都是用的double储存斜率,其实我们可以用分数的方法保存,这就需要一个gcd. 然后我们用m ...

  2. mogdb里xlog相关的几个参数

    openGauss/MogDB 3.0 闪回恢复测试 本文出处:https://www.modb.pro/db/411368 介绍 闪回恢复功能是数据库恢复技术的一环,可以有选择性的撤销一个已提交事务 ...

  3. Grafana系列-统一展示-10-Explore Jaeger

    系列文章 Grafana 系列文章 Explore Jaeger 你可以通过Explore查询和显示 Jaeger 的 trace.有 3 种方法: Query by search Query by ...

  4. Blocks(单调栈)

    题干中说每次选择一个大于k的数,还要选他左右两个数其中之一加上一,最后问你最长的每个数不小于K的子序列. 这些都是障眼法,其实就是问你最长的平均值大于或等于K的最长子序列,这样就明朗了. 接下来就是找 ...

  5. Python 爬虫初探

    准备部分 0x01 爬虫的简介和价值 a. 简介 自动抓取互联网数据的程序,是基础技术之一 b. 价值 快速提取网络中有价值的信息 0x02 爬虫的开发环境 a. 环境清单 Python3.7 开发环 ...

  6. 认识tensorflow - 【老鱼学tensorflow2】

    深度学习是模仿了生物的神经元的概念,你可以想象用一大堆的神经元通过各种刺激来对外部世界进行感知,从而建立起对外部世界的模型. 比如给你一个数据对: x y -1 -3 0 -1 1 1 2 3 3 5 ...

  7. nuxt使用介绍[学习记录]

    服务端渲染 传统服务端渲染 单页面应用 SPA nuxt 是什么 Nuxt.js 是一个基于 Vue.js 的通用应用框架. 通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 ...

  8. Oracle 存储包死锁杀进程操作

    Oracle 存储包死锁杀进程操作 突然想起来,正好记一份 首先查询锁包的情况 select distinct session_id from dba_ddl_locks where name=upp ...

  9. 阿里云EMAS移动测试,帮您快速掌握移动端兼容性测试技巧

    简介: 兼容性测试用于验证应用在不同设备上进行安装/启动/登录/不同版本覆盖安装/卸载等操作时,是否存在兼容性问题:如界面适配问题.应用性能等,现阿里云EMAS套餐免费试用,帮您快速掌握移动端兼容性测 ...

  10. DataWorks开发ODPS SQL开发生产环境自动补全ProjectName

    简介: DataWorks标准模式下,支持开发环境和生产环境隔离,开发环境和生产环境的数据库表命名有所区别,如果需要在开发环境访问生产环境的数据库表或者跨项目空间访问其他项目空间的表,需要根据proj ...