IDEA 查看Springboot单元测试代码覆盖率报错

这篇博客主要记录了在使用IntelliJ IDEA时遇到的报错信息,涉及JavaAgent处理失败的问题。错误源于用户名为中文导致的路径问题,解决方案包括将Windows登录用户名改为英文或者修改IDEA的临时文件路径和系统路径配置。同时,博客提到了更改这些路径可能带来的插件丢失风险。

img

img

报错信息:
D:\resource\java_jdk_1.8.261\bin\java.exe -ea -javaagent:C:\Users\镜\AppData\Local\JetBrains\IntelliJIdea2020.2\testAgent\intellij-coverage-agent-1.0.512.jar=C:\Users\镜\AppData\Local\Temp\coverage10args -Didea.test.cyclic.buffer.size=1048576 "-javaagent:E:\tools\IntelliJ IDEA 2020.2\lib\idea_rt.jar=60647:E:\tools\IntelliJ IDEA 2020.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\镜\AppData\Local\Temp\classpath770525232.jar com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.faw_qm.erpcg.gld.gld895.service.TestGld895Service
FATAL ERROR in native method: processing of -javaagent failed
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.coverage.main.CoveragePremain.premain(CoveragePremain.java:35)
at com.intellij.rt.coverage.main.CoveragePremain.premain(CoveragePremain.java:28)
6 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
at com.intellij.rt.coverage.instrumentation.Instrumentator.performPremain(Instrumentator.java:55)
at com.intellij.rt.coverage.instrumentation.Instrumentator.premain(Instrumentator.java:33)
12 more

Process finished with exit code 1

解决方案: 1.更改window 登录的用户名为英文。(此方法自行百度吧,就不做讲解了)

2.更改idea生成文件的默认路径:

  help->Edit Custom VM Options...  中添加  -Djava.io.tmpdir=E:\resource\idea\Temp

注意: 一定要先创建对应的文件夹 

 

 

既然都更改了临时文件的位置,不如其他的默认路径一起更改了吧:

注意:更改下面的默认路径配置之后,之前的idea插件将全部丢失!!!

1.找到idea安装目录下面的bin文件下的idea.properties

(E:\tools\IntelliJ IDEA 2020.2\bin\idea.properties)

找到:idea.system.path=${user.home}/.IntelliJIdea/system

idea.plugins.path=${idea.config.path}/plugins

更改即可。

 

 

 

在使用 IntelliJ IDEA 进行单元测试时,若覆盖率报告出现错误(如报错信息为“测试框架意外退出”或“At least 5 arguments expected but 1 found”),通常与临时文件路径配置、模块化项目结构冲突或 JVM 参数设置有关。以下是常见的解决方法: ### 配置自定义 VM 参数 在某些情况下,IDEA 使用的默认临时目录可能导致覆盖率工具无法正常工作。可以通过以下方式修改 IDEA 的临时目录路径: 1. 打开 IntelliJ IDEA。 2. 点击菜单栏中的 `Help` → `Edit Custom VM Options`。 3. 在打开的 `idea64.vmoptions` 文件末尾添加如下内容: ``` -Djava.io.tmpdir=D:\temp ``` 注意:路径必须为全英文且实际存在,例如 `D:\temp` 或 `E:\temp`[^1]。 4. 在指定路径下手动创建 `temp` 文件夹(如果尚未存在)。 5. 重启 IntelliJ IDEA,并重新运行单元测试覆盖率分析。 ### 检查模块化项目的配置 对于模块化项目结构,当运行整个项目的覆盖率测试时,可能出现因模块工作目录不一致导致的配置冲突。建议采取以下措施: - **统一模块的工作目录**:确保所有模块的工作目录配置一致,避免因路径差异导致测试框架加载失败。 - **单独运行模块的覆盖率测试**:尝试对单个模块运行覆盖率测试,以确认是否为模块间配置冲突所致[^2]。 - **更新 IntelliJ IDEA 和插件**:确保使用的 IDEA 版本及所有相关插件(如覆盖率工具 JaCoCo)为最新版本,以修复潜在的兼容性问题。 ### 清理缓存并重建索引 有时,IDE 缓存损坏也可能导致覆盖率工具异常。可以尝试通过清理缓存和重建索引来解决: 1. 关闭当前项目。 2. 点击 `File` → `Manage IDE Settings` → `Restore Default Settings`。 3. 重新导入项目并等待索引重建。 4. 再次运行覆盖率测试。 ### 使用命令行运行覆盖率测试 作为替代方案,也可以通过 Maven 或 Gradle 命令行工具生成覆盖率报告,以排除 IDEA 自身的干扰: #### Maven 示例(使用 JaCoCo) ```bash mvn clean test jacoco:report ``` #### Gradle 示例(使用 JaCoCo) ```bash gradle test jacocoTestReport ``` 执行完成后,可在 `target/site/jacoco/index.html`(Maven)或 `build/reports/jacoco/test/html/index.html`(Gradle)中查看覆盖率报告。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值