java.lang.NoSuchMethodError во время насмешки над MessageHandler в Spring Integration - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть простая конфигурация Spring Integration, которая работает

@Configuration
public class FTPIntegration {


@Bean
public MessageChannel outputIntegrationChannel(ErrorHandler errorHandler) {
    return MessageChannels
            .publishSubscribe()
            .errorHandler(errorHandler)
            .get();
}

@Bean
public IntegrationFlow ftpIntegration(ErrorHandler errorHandler, MessageHandler messageHandler) {
    return IntegrationFlows
            .from(outputIntegrationChannel(errorHandler))
            .transform(Transformers.toJson())
            .handle(messageHandler)
            .get();
}
}

Я хочу подготовить несколько интеграционных тестов, используя Mockito для насмешки, шпионажа MessageHandler и ErrorHandler.Вот почему я хочу заменить их в тестовой конфигурации.

@Profile("test")
@EnableIntegration
@Configuration
@Import(value = FTPIntegration.class)
public class TestConf {

@Bean
@Primary
public ErrorHandler errorHandler() {
    return mock(ErrorHandler.class);
}

@Bean
@Primary
public MessageHandler messageHandler() {
    return mock(MessageHandler.class);
}
}

И использовать это в моем тестовом классе

@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestConf.class)
public class FTPIntegrationTest {

@Autowired
@Qualifier("outputIntegrationChannel")
private MessageChannel integrationChannel;
}

Но при инициализации я получил ошибку,

java.lang.NoSuchMethodError: org.mockito.MockingDetails.getMockCreationSettings()Lorg/mockito/mock/MockCreationSettings;

at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:107)
at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:84)
at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:70)
at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.beforeTestMethod(ResetMocksTestExecutionListener.java:57)
at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:291)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
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 com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

Это ошибка моей конфигурации или нет возможности использовать компоненты Mockito в Spring Integration?

Когда я использую простую ссылку на метод, например, возвращаю log :: error или log :: info в MessageError и MessageHandler it работает правильно .

Я также пытался использовать MockIntegration.mockMessageHandler (); , но результат тот же (исключение), потому что он использует макет Mockito внизу.

1 Ответ

0 голосов
/ 27 сентября 2018

Mockito был в версии 1.x, которая была несовместима с Spring Integration с версией 5.x.Обновление Mockito до версии 2.x (2.22.0) исправило эту проблему и работает с Spring Integration (5.0.8.RELEASE).

...