【maven踩坑】一个坑 junit报错 但真正导致这个的不是junit的原因

事件起因

报错一:
Internal Error occurred.
org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-vintage' failed to discover tests

报错二:
Internal Error occurred.
org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover tests

启动测试报错:
在这里插入图片描述
我在删掉junit4的依赖导入后,只使用junit5的注解,就会报错如下:

在这里插入图片描述

首先我遇到了上面两个报错,但是这两个报错我查过了,也思索了很久,我并未发现我代码中的明显问题,也尝试了网上部分说是这个junit的冲突报错的问题,但最后都没有解决

我遇到该问题的场景:我仿造一个项目写自己的项目的时候,写测试类的时候总是报错:

但是这两个错误我找遍了网上的内容,说是依赖冲突的(junit4、junit5的冲突什么的) 但我在经历好多的尝试后,仍然没有解决,但我把那个我仿的项目拉下来比较了所有的依赖和文件内容,测试类的写法,发现我们是一样的,但我在我本地跑它的那个项目的时候发现它能正常运行测试类,且我新加一些测试类仍然能在它的项目下运行, 这就是让我最不解的地方,最后我发现它们唯一的不同,就是项目所处的路径不同但是它的目录甚至有中文路径都能正常运行,且我的目录没有中文,但是就是不能正常运行测试类

环境和工具

idea、maven、Junit5

操作过程

运行的测试类代码可以看到我使用的是 org.junit.jupiter.api.Test; 和 org.junit.jupiter.api.Assertions; 这是junit5的写法

package com.qc.project.service;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;



@SpringBootTest
public class UserInterfaceInfoServiceTest {

    @Resource
    private UserInterfaceInfoService userInterfaceInfoService;

    @Test
    public void invokeCount() {
        boolean b = userInterfaceInfoService.invokeCount(1l,1l);
        Assertions.assertTrue(b);
    }
    @Test
    public void qcTest() {
        System.out.println("ces ");

    }
}

我所使用的依赖:
其实spring-boot-starter-test已经包含了junit5的依赖,而且我代码里面使用的是junit5的注解,junit4.13.2那么我注释掉后也会报第二个错
在这里插入图片描述
在尝试了网上不少的解决junit 的这个报错的解决办法后,我突然想到那个在中文路径下都能正常运行的模仿它的项目,于是我将这个项目的目录向上抽了一层, 从原来的 E:\myProject\api_project\qcapi-backend 变为了 E:\myProject\api_project,再然后我打开项目进行正常编译运行,突然项目就不报错了,然后正常编译运行后,测试类也能够正常运行了,但是打包出来的target目录和之前报错的目录存在一定的差别,如下图右边所示,下图左边是我报错时,打包的target目录

在这里插入图片描述

为了进一步确认该问题,我又创建了另一个带下划线的目录,然后将项目移入其目录下,又出现了之前的报错,但是我修改去除了目录的下划线,还是会出现之前一样的错误(我以为是目录下带下滑线导致的观点又出错了)

解决办法

现目前我得出的初步结论是:
当前项目所处的目录层级过深 可能导致 junit时不时会出现报错, 目前我不确定这是maven导致的还是其中某个依赖导致的 只是根据我在有下划线和没有下划线的目录下 然后到上级目录 进行尝试后得出的结论
暂定吧 没找到具体的原因

后续补充:因为有时候引入包的时候也会发生一些莫名奇妙的错误,但实际上来说是没有问题的,有时候单纯就是idea 突发性癫痫 噗!

结束语

若是对你有所帮助的话,希望能获得你的 点赞、评论、收藏,这将是对我很大的鼓励!!! 这对我真的很重要!!!
蟹蟹٩(‘ω’)و

### 解决 JUnit Jupiter 测试引擎无法发现测试用例导致JUnitException 错误 JUnit Jupiter 是 JUnit 5 的核心模块之一,负责识别并执行带有特定注解的方法作为测试案例。如果遇到 `JUnitException` 并提示未能找到任何测试方法,则可能是由于以下几个原因造成的: - **缺少必要的依赖项**:确保项目中包含了最新版本的 JUnit Jupiter API 和 Engine 库文件[^1]。 对于 Maven 构建工具而言,可以在项目的 pom.xml 文件里加入如下配置来引入这些库: ```xml <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.x.x</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.x.x</version> <scope>test</scope> </dependency> ``` - **不兼容的注解形式**:不同于 JUnit 4 中使用的 `@Test`, 在 JUnit 5 下应当采用 `@org.junit.jupiter.api.Test` 来标记测试函数。 例如: ```java import org.junit.jupiter.api.Test; public class ExampleTests { @Test void exampleTestMethod() { /* ... */ } } ``` - **类路径设置错误或者 IDE 配置不当**:确认编译后的 .class 文件位于正确的目录结构下,并且被正确加载到 JVM 类路径中;另外还需检查开发环境中关于测试框架的相关设定是否准确无误[^2]。 针对提到的目标 VM 连接问题以及 socket 地址 '127.0.0.1:53364' ,这通常发生在远程调试场景或者是某些特殊类型的集成/端到端测试过程中。然而标准单元测试并不涉及此类操作。因此建议先排查上述基础性因素后再考虑更复杂的情况。 #### 关于 Selenium WebDriver 抛出 NoAlertPresentException 异常情况说明 当尝试通过 Selenium WebDriver 处理警告框 (alert) 而实际页面上并没有相应弹窗存在时就会抛出此异常。具体表现为连续登录时不显示成功消息从而引发自动化脚本报错。对此可以采取以下措施加以改进[^4]: - 修改业务逻辑使得每次登录都触发一次新的会话创建流程; - 或者调整测试策略绕过该环节直接验证其他预期行为; - 另外也可以利用 try-catch 结构捕获潜在异常并合理处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿,葱来了-C is coming

老板大气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值