Как мне заставить spock-отчеты генерировать index.html вместо получения класса ClassCastException [B нельзя привести к классу [C'

При создании отчетов модульного тестирования с использованием 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?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Системное свойство

Помимо обновления других зависимостей до более поздних версий и выравнивания заводных версий, которые должен разрешают, быстрое исправление — объявить системное свойство:

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 успешно сгенерировался для нас, пока я исследовал обновление версий зависимостей.

Версии зависимостей

Альтернативный способ исправления — поднять зависимости до следующих версий (тех, которые вы используете):

  • Спок-отчеты: 2.3.0-groovy-3.0
  • spock-subjects-collaborators-extension: 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>

Наконец-то тот, кто всесторонне отвечает на свой вопрос, уделяя время документированию своих выводов. ? Это должно быть нормальным случаем, но большинство людей здесь эгоистичны, задают много вопросов, но когда им удается решить свои проблемы, они просто пишут корявый ответ или не отвечают вообще.

kriegaex 23.03.2022 10:01

Другие вопросы по теме

Похожие вопросы

Как я могу напечатать двумерный массив символов в Java, чтобы создать сетку 20x20?
Как я могу удалить документ в Firebase после сортировки по определенному полю?
Как удалить строки, содержащие хотя бы одну заглавную букву, из списка ArrayList<String>?
AndroidRuntime: НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: исключение Nullpointerexception, InflateException
Как я могу удалить элемент из списка, перебирая его?
Понимание «ссылки» узла в классе узла
Есть ли какой-либо метод сортировки массива строк в определенном порядке в java, в котором есть буквенно-цифровые элементы?
Как выравнивание по верхнему краю рядом расположенных панелей, Java Swing
Получение даты изменения файлов - веб-скрейпинг с BeautifulSoup в Python
Регулярное выражение для сопоставления нескольких слов, заключенных в фигурные скобки, разделенных/разделенных символом подчеркивания, НО игнорирующих символы в начале/конце строки?