'ClassCastException 类 [B 无法在尝试生成 spock 报告时转换为类 [C']

问题描述 投票:0回答:1

使用 spock-reports 生成单元测试报告时,我收到 ClassCastException:

class [B cannot be cast to class [C ([B and [C are in module java.base of loader 'bootstrap')

我使用 Java 11 和 Spock 2.0 进行单元测试,并使用 spock-reports (2.0.1-RC3) 生成测试报告,由 Surefire (2.22.2) 发起。我还使用 spock collaborators (1.2.2) 扩展。

虽然单独的测试报告已成功创建,但当 spock-reports 尝试生成聚合 HTML 报告(index.html)时,它会得到:

c.a.s.r.internal.HtmlReportAggregator    : Failed to create aggregated report

java.lang.ClassCastException: class [B cannot be cast to class [C ([B and [C are in module java.base of loader 'bootstrap')
    at groovy.json.internal.FastStringUtils$StringImplementation$1.toCharArray(FastStringUtils.java:88) ~[groovy-all-2.3.8.jar:2.3.8]
    at groovy.json.internal.FastStringUtils.toCharArray(FastStringUtils.java:175) ~[groovy-all-2.3.8.jar:2.3.8]
    at groovy.json.internal.BaseJsonParser.parse(BaseJsonParser.java:103) ~[groovy-all-2.3.8.jar:2.3.8]
    at groovy.json.JsonSlurper.parseText(JsonSlurper.java:208) ~[groovy-all-2.3.8.jar:2.3.8]
    at groovy.json.JsonSlurper$parseText.call(Unknown Source) ~[na:na]
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) ~[groovy-3.0.9.jar:3.0.9]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) ~[groovy-3.0.9.jar:3.0.9]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139) ~[groovy-3.0.9.jar:3.0.9]
    at com.athaydes.spockframework.report.internal.ReportDataAggregator$_getAllAggregatedDataAndPersistLocalData_closure1.doCall(ReportDataAggregator.groovy:44) ~[spock-reports-2.3.0-groovy-3.0.jar:2.3.0-groovy-3.0]

我可以从堆栈跟踪中看到 Spock 使用的是 groovy 3.0.9,但 groovy-all 2.3.8 正在被引入(通过 spock-collaborators 扩展)。

虽然我可以并且将会调查更新各种依赖项版本,但同时我可以做些什么来防止此异常,以便生成index.html?

java spock classcastexception maven-surefire-plugin spock-reports
1个回答
1
投票

系统属性

除了将其他依赖项更新到更高版本并对齐常规版本(这应该可以解决它)之外,快速修复方法是声明系统属性

groovy.json.faststringutils.disable=true
我们可以通过将其添加为 pom.xml 中的 

systemPropertyVariables

 配置条目来为我们的测试进行设置:

<plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <systemPropertyVariables> <groovy.json.faststringutils.disable>true</groovy.json.faststringutils.disable> </systemPropertyVariables> ... ... </plugin>
当我研究提升依赖版本时,这足以让我们成功生成index.html。

依赖版本

另一种修复方法是将依赖项提升到以下版本(您使用的版本):

    spock-报告:2.3.0-groovy-3.0
  • spock-受试者-合作者-扩展:2.0.0
  • maven-surefire-插件:3.0.0-M5
并添加直接的 groovy-all 依赖项(测试范围,因为我们只使用 groovy 进行测试):

<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>3.0.10</version> <scope>test</scope> <type>pom</type> </dependency>
    
© www.soinside.com 2019 - 2024. All rights reserved.