Spring Boot junit5 测试在本地工作(Windows)但不在 Jenkins(Linux)中

Posted

技术标签:

【中文标题】Spring Boot junit5 测试在本地工作(Windows)但不在 Jenkins(Linux)中【英文标题】:Spring Boot junit5 tests working locally (Windows) but not in Jenkins (Linux) 【发布时间】:2021-03-14 09:44:45 【问题描述】:

我将在这里回答我自己的问题,以防它对其他人有用...

在更新到 Spring Boot 2.4.0(从 2.3.4)和 JUnit5(从 JUnit4)之后,我的单元测试在 Jenkins 上开始失败。奇怪的是他们在本地工作。

这是在 Jenkins 的错误日志中:

Neither @ContextConfiguration nor @ContextHierarchy found for test class [my.PackageName.controller.ControllerTest], using SpringBootContextLoader

为什么测试停止在 Jenkins 上运行,但在本地很好?

我在 SO 上找到了类似的问题/答案,但不是我的具体问题...(如果答案已经存在,请致歉)

【问题讨论】:

【参考方案1】:

我花了太长时间才发现它,但关键是:

Neither @ContextConfiguration nor @ContextHierarchy found for test class [my.**PackageName**.controller.ControllerTest], using SpringBootContextLoader

PackageName 是驼峰式的。出于某种原因,很久以前,当我创建我的测试类时,我将它们放入包中:

package my.PackageName.controller;

解决方法是将其更改为:

package my.packagename.controller;

因为 Linux 文件系统区分大小写,而 Windows 则不。而且对依赖项的更新似乎改变了包在某处解析的方式。

【讨论】:

以上是关于Spring Boot junit5 测试在本地工作(Windows)但不在 Jenkins(Linux)中的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Boot 和 JUnit5 在 Intellij 中终止所有测试

使用 JUnit5+Spring Security 测试 Spring Boot 控制器

如何在 Junit5 / spring boot 中命令执行控制器测试类?

Spring Boot 集成 JUnit5,更优雅单元测试!

使用 spring boot gradle 插件无法使用依赖管理执行 junit5 测试

我是不是需要使用 Kotlin Junit5 和 Spring Boot 将 Spring 注释复制到内部类?