我和spring boot maven 工程里运行junit单元测试的故事

本文探讨了从JUnit4迁移到JUnit5的过程,特别是在Spring Boot项目中的实践。介绍了如何排除junit-vintage-engine依赖,解决IDEA中Maven单元测试资源加载问题,并分享了在使用JUnit5进行单元测试时遇到的挑战。
摘要由CSDN通过智能技术生成

两年没怎么写程序,因为紧急任务被拉去写程序。发现单元测试的一些变化。

junit4被5代替了

spring boot的start.io下载默认工程里,将junit-vintage-engine去掉。原因:spring-boot-starter-test有两个依赖,vintage(junit4)和jupiter (junit5).spring推荐用junit5,所以把vintage去掉留下了jupiter。 和junit4比,5的用法有一些不同,比如@Ignore被@Disabled代替,具体见
junit5官方手册

       <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

IDEA不停解析junit依赖

一个最简单的junit单元测试,compile没问题,但是不能run。执行时,idea会一直resolve maven dependency。具体哪些依赖,基本上就是jupiter所有的(我也没仔细盯着看)依赖。看起来解析好了,再run又开始resolve maven dependency…而且还是刚才resolve过的那些,在pom.xml加上:

       <dependency>
			<groupId>org.junit.platform</groupId>
			<artifactId>junit-platform-launcher</artifactId>
			<scope>test</scope>
		</dependency>

至于原因,一头雾水

MAVEN的test resources文件加载不到

由于是maven工程,单元测试在src/test/java/com…下,它用到的文件在src/test/resources/file.xml
Files.read(“file.xml”, StandardCharsets.UTF_8)
抛异常NPE (按理说找不到文件应该是IOE,汗)。
java doc说由Class Loader按照路径顺序查找文件。Class Loader路径在哪谁记得住啊,打印:
this.getClass().getClassLoader().getResource(".").getPath()
结果:
D:/workspace_git/projectA/projectA-submodule/target/test-classes/
因为用的IDEA,左侧就能看到target,发现没有这个file.xml文件,只有.class文件。
在pom.xml添加:

	<build>
		<testResources>
			<testResource>
				<directory>${project.basedir}/src/test/resources</directory>
			</testResource>
		</testResources>
	</build>

resources下的所有一级目录及文件,包括file.xml,被放到了test-classes的根目录下了。这时执行:
this.getClass().getClassLoader().getResource(“file.xml”)
得到这个文件(InputStream)。如果找文件不存在,返回的Resource是null。
另外,this.getClass().getResource(".")会打印当前class的路径。即使这样Files.read(…)也还是NPE

结论:现在运行个junit都这么难了吗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值