解决@Test注解不生效问题_别碰我代码的博客-程序员宝宝[email protected]注解 无法运行

技术标签: spring  junit  java  单元测试  源码  

解决@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 的版本不一致所导致的

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qi_ming_hao_nan/article/details/115003824

智能推荐

在元素上写事件和addEventListener()的区别_吴迪98的博客-程序员宝宝

在元素上写事件和addEventListent()的区别onclick添加事件不能绑定多个事件,后面绑定的会覆盖前面的。而addEventListener能添加多个事件绑定,按顺序执行。addEventListener方式,不支持低版本的IE。(attachEvent 支持IE)。普通方式绑定事件后,不可以取消。addEventListener绑定后则可以用 removeEvenListe...

Oracle客户端查询中文出现乱码的问题_lddongyu的博客-程序员宝宝

在使用BO的Universe连接oracle数据库时,查询到的中文显示乱码:--->regedit     --->HKEY_LOCAL_MACHINE         --->SOFTWARE              --->ORACLE                 --->HOMEO                      发现NLS_LANG的键值为:AMER

poj3295--Tautology_刀刀狗0102的博客-程序员宝宝

TautologyTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 9133 Accepted: 3498DescriptionWFF 'N PROOF is a logic game played with dice. Each die has six f

unittest用例前后置(testFixture测试夹具)_董林夕的博客-程序员宝宝

unittest用例前后置import unittestdef setUpModule(): print("模块级别的夹具开始")def tearDownModule(): print("模块级别的夹具结束")class Test1(unittest.TestCase): @classmethod # 这是类方法,必须加上这个装饰器 def setUpClass(cls): print("\n在每个类之前执行一次,如创建数据库连接,生成日志

部分面试笔记_时小浅的博客-程序员宝宝

1.数据一致性问题1.1redis一致性(容灾)原面试题:redis集群数据一致性如何保证,如果挂了一台机会怎样?可以从故障检测和从节点选举说起。故障检测集群中每个节点都会定期的向集群中的其他节点发送PING信息。如果在一定时间内,发送ping的节点A没有收到某节点B的pong回应,那么A将B标识为pfail。A在后续发送ping时,会带上B的pfail信息,通知给其他节点。如果B被标记为pfail的个数大于集群主节点个数的一半(N/2 + 1)时,B会被标记为fail,A向整个集群广播,该节

随便推点

PDF与Base64的相互转换以及操作[email protected]的博客-程序员宝宝_pdf转base64

依赖 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.4.3</version> </dependency> <dependency>

java单元测试 规范,java – 在spock单元测试规范中传递实际参数_三言两语无所措的博客-程序员宝宝

org.spockframework:spock-core:0.7-groovy-2.0Gradle 1.12Groovy 1.8.6java你好,我正在尝试使用spock和我的java应用程序来运行单元测试并使用gradle构建.但是,由于我是spock的新手,我不确定如何传递实际参数以获得正确的输出?这是我想要测试的函数签名,它接受inputStream,char []和String:publ...

Go静态代码检查工具GolangCI-Lint_benben_2015的博客-程序员宝宝_golangci-lint

GolangCI-Lint是一个lint聚合器,它的速度很快,平均速度是gometalinter的5倍。它易于集成和使用,具有良好的输出并且具有最小数量的误报。而且它还支持go modules。最重要的是免费开源。下面公司或者产品都使用了golangci-lint,例如:Google、Facebook、Red Hat OpenShift、Yahoo、IBM、Xiaomi、Samsung、Ard...

vs2017编译Assimp_hp_cpp的博客-程序员宝宝

一、安装DirectX SDKDirectX SDK下载地址安装 DirectX SDK 时出现"S1023"错误解决方案:若要解决此问题,必须在安装 2010 年 6 月 DirectX SDK 之前卸载 Visual C++ 2010 可再发行组件的所有版本。 您可能已安装以下一个或多个产品:Microsoft Visual C++ 2010 x86 可再发行组件Microsoft Visual C++ 2010 x64 可再发行组件包括比Microsoft Visual C++ 20

用最有效率的方法算出2乘以8等于几?(C#移位运算)_轮回之门的博客-程序员宝宝

出处:http://www.cnblogs.com/flydoos/archive/2011/09/06/2169280.htmlC#移位运算(左移和右移) 这是网上流传的“变态级JAVA程序员面试32问”的其中一题(二十八题),然后下面给出来的答案是 第二十八,编程题: 用最有效率的方法算出2乘以8等於几?  有C背景的程序员特别喜欢问这种问题。   

Tensorflow 对抗网络GAN_雪易的博客-程序员宝宝

1. 对抗网络GAN的网络结构对抗网络包含了2个子网络:生成网络(Generator,G)和判别网络(Discriminator,D),其中生成网络负责学习样本的真实分布,判别网络负责将生成网络采样的样本与真实样本区分开来。2. 对抗网络GAN的训练方法对于判别网络 D,它的目标是能够很好地分辨出真样本????????与假样本????????。以图片生成为例,它的目标是最小化图片的预测值和真实值之间的交叉熵损...

推荐文章

热门文章

相关标签