При создании отчетов модульного тестирования с использованием spock-отчетов я получаю 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-отчетов (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?
Помимо обновления других зависимостей до более поздних версий и выравнивания заводных версий, которые должен разрешают, быстрое исправление — объявить системное свойство:
groovy.json.faststringutils.disable=true
Мы можем установить это для наших тестов, добавив его в качестве надежной записи конфигурации systemPropertyVaribles
в pom.xml:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<groovy.json.faststringutils.disable>true</groovy.json.faststringutils.disable>
</systemPropertyVariables>
...
...
</plugin>
Этого было достаточно, чтобы index.html успешно сгенерировался для нас, пока я исследовал обновление версий зависимостей.
Альтернативный способ исправления — поднять зависимости до следующих версий (тех, которые вы используете):
и добавьте прямую зависимость 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>
Наконец-то тот, кто всесторонне отвечает на свой вопрос, уделяя время документированию своих выводов. ? Это должно быть нормальным случаем, но большинство людей здесь эгоистичны, задают много вопросов, но когда им удается решить свои проблемы, они просто пишут корявый ответ или не отвечают вообще.