Spring Boot Test на JsonMappingException дает неэффективную трассировку стека - PullRequest
0 голосов
/ 25 марта 2020

Пружинный интеграционный тест, который определяется как

@RunWith(SpringRunner.class)
@SpringBootTest(classes = HiVssFormioWrapperApplication.class, webEnvironment = WebEnvironment.DEFINED_PORT)
@TestPropertySource(locations= {"classpath:application.properties", "classpath:application-integration-test.properties"})

, недавно начал проваливаться, однако трассировка стека дает мало подсказок относительно того, где искать. Он говорит, что не так, но не где. Вот полная трассировка стека, обратите внимание, что буквально нет ни одного элемента трассировки стека, который бы указывал на наш код:

org.opentest4j.MultipleFailuresError: Multiple Failures (2 failures)
    com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of io.vavr.collection.List out of START_OBJECT token
 at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: com.gera.gsm.hivssformiowrapper.domain.periodpackage.DataPackage["department"]->com.gera.gsm.hivssformiowrapper.domain.Submission["data"]->com.gera.gsm.hivssformiowrapper.domain.Department["fillableForms"])
    com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of io.vavr.collection.List out of START_OBJECT token
 at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: com.gera.gsm.hivssformiowrapper.domain.periodpackage.DataPackage["department"]->com.gera.gsm.hivssformiowrapper.domain.Submission["data"]->com.gera.gsm.hivssformiowrapper.domain.Department["fillableForms"])
    at org.junit.vintage.engine.execution.TestRun.getStoredResultOrSuccessful(TestRun.java:179)
    at org.junit.vintage.engine.execution.RunListenerAdapter.fireExecutionFinished(RunListenerAdapter.java:211)
    at org.junit.vintage.engine.execution.RunListenerAdapter.testFinished(RunListenerAdapter.java:177)
    at org.junit.vintage.engine.execution.RunListenerAdapter.testFinished(RunListenerAdapter.java:76)
    at org.junit.runner.notification.SynchronizedRunListener.testFinished(SynchronizedRunListener.java:56)
    at org.junit.runner.notification.RunNotifier$7.notifyListener(RunNotifier.java:190)
    at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:72)
    at org.junit.runner.notification.RunNotifier.fireTestFinished(RunNotifier.java:187)
    at org.junit.internal.runners.model.EachTestNotifier.fireTestFinished(EachTestNotifier.java:38)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:331)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
    at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:40)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
    at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
    at org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80)
    at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:71)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229)
    at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197)
    at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:137)
    at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:89)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)

Я подозреваю MultipleFailuresError, поскольку, возможно, это то, что глотает правильную трассировку стека, но Поиск в Google «отключить junit MultipleFailuresError» не принес ничего полезного.

Вероятно, это не проблема с eclipse, потому что запуск с maven из командной строки дает похожий результат.

Используются версии

  • Java: OpenJDK13
  • SpringBoot: 2.2.0.RELEASE

    Глядя на иерархию зависимостей, получаем

    • джунит 4.12
    • Джексон 2.10
  • Вавр: 0.10

1 Ответ

0 голосов
/ 25 марта 2020

Исключением является то, что Джексон, сериализатор JSON, не может сериализовать класс Vavr List.

Чтобы сделать эту работу, необходимо добавить поддержку Vavr Jacksion.

<dependency>
    <groupId>io.vavr</groupId>
    <artifactId>vavr-jackson</artifactId>
    <version>0.10.2</version>
</dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...