解决@Test注解不生效问题

解决@Test注解不生效问题

这个问题是我在编译spring源码,并运行自己写的单测的时候所遇到的
并不清楚在一般的项目中是否会复现这个问题,以及复现之后根据这个方法能否解决,请各位自行斟酌
另外,很喜欢《哈姆雷特》中的一句话:有一千个编译spring源码的人,就有一千种错误😑
我身边编译spring源码的朋友,都遇到了大大小小的问题,要命的是,这些问题都各不相同🤨


正文

所用的spring源码版本是 5.3.5-SNAPSHOT

克隆、编译 spring 源码

不是重点,可跳过

从 GitHub 上拉取 spring 源码下来,然后进行编译
如果用 gradlew build 命令进行整个 spring 项目的编译的过程中会遇到一些模块的单测跑不通,建议可以先单独编译这个模块,然后再去编译整个 spring 项目
即使是这样,我也还是遇到 spring-core 中始终有些单测跑不通的情况,应该不是很影响

写单测

问题的出现和描述,看一下

然后,就可以开始写自己的单测来检验 spring 项目是否真正地准备就绪
在这里插入图片描述
上图中的 spring-spice-practice 是我自己新增的模块,用于自己的一些测试
单测代码如下:

/**
 * @author spice
 * @date 2021/03/18 22:09
 */
public class UserServiceTest {

	@Test
	public void test() {
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
		UserService userService = context.getBean("userServiceImpl", UserService.class);
		userService.printUser();
	}
}

运行上面的单测后,控制台输出这样的错误提示:

FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':spring-spice-practice:test'.
> There were failing tests. See the report at: file:///P:/Project%20of%20Github/spring-framework/spring-spice-practice/build/reports/tests/test/index.html

然后,打开 report(spring-spice-practice/build/reports/tests/test/index.html),发现主要的错误是这样的:

org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not complete execution for Gradle Test Executor 2.
Caused by: org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover tests
Caused by: org.junit.platform.commons.JUnitException: ClassSelector [className = 'com.spice.service.UserServiceTest'] resolution failed
Caused by: java.lang.NoClassDefFoundError: org/junit/jupiter/api/DisplayNameGenerator$Simple
Caused by: java.lang.ClassNotFoundException: org.junit.jupiter.api.DisplayNameGenerator$Simple

解决问题

然后我就去翻博客,发现并没有能解决我的问题
既然是 junit 的问题,而且我又用的是 junit5,我猜测可能是 junit 的依赖和引擎版本不匹配的问题
在我创建 spring-spice-practice 模块的时候,IDEA 默认帮我创建的该模块的 gradle 文件是这样子的:

plugins {
    id 'java'
}

group 'org.springframework'
version '5.3.5-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}

test {
    useJUnitPlatform()
}

可以看到 junit-jupiter-api 的版本是 5.6.1 的,但是 junit-jupiter-engine 没有指定版本
我指定了 junit-jupiter-engine 的版本,并且也是 5.6.1 之后,问题就解决了,gradle 文件如下:

plugins {
    id 'java'
}

group 'org.springframework'
version '5.3.5-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    compile(project(":spring-core"))	// 必要的模块
    compile(project(":spring-context"))	// 必要的模块
    compile(project(":spring-beans"))	// 必要的模块
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.1'
}

test {
    useJUnitPlatform()
}

然后,我又把 api 的版本和 engine 的版本都换成 5.6.0 的,也是 ok 的🙂
所以,猜测之前的问题是由于 api 的版本和 engine 的版本不一致所导致的

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
回答: 如果在使用JUnit时,@Test注解无法显示,可能是因为你的IDE没有正确配置。根据引用\[1\]的建议,你可以尝试以下步骤来解决这个问题: 1. 打开你的IDE,并找到编辑自定义VM选项的地方。 2. 在自定义VM选项中添加代码"-Deditable.java.test.console=true"。 3. 重启你的IDE,确保配置生效。 另外,根据引用\[2\]的建议,你还可以检查你的项目中是否包含了JUnit的相关库文件。在lib文件夹下找到junit4.jar和hamcrest-core-1.3.jar,并确保它们都存在。 通过以上步骤,你应该能够解决@Test注解无法显示的问题。如果问题仍然存在,请确保你的IDE和项目配置正确,并且你的代码中正确导入了JUnit相关的包。 #### 引用[.reference_title] - *1* [Idea 无法引入 @Test 或 @Test 引入报错【BUG 解决】](https://blog.csdn.net/Q54665642ljf/article/details/127179647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [解决IDEA @Test不能自动导包问题 JUnit4 was not loaded](https://blog.csdn.net/CSDNCR/article/details/125139902)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值