【问题标题】:NoscuchMethodError wehn trying to use @SpyBean or @MockBean in SpringBootIntegrationTest尝试在 Spring Boot IntegrationTest 中使用 @SpyBean 或 @MockBean 时出现 NosuchMethodError
【发布时间】:2018-11-23 06:46:51
【问题描述】:

我正在尝试在我的 SpringBoot IntegrationTest 中使用 SpyBean。我的测试类如下

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
@EnableAutoConfiguration
public class MyTest {

    @SpyBean
    private MyService myService;

    @Test
    public void test() {
    }
}

我的 build.gradle 测试如下

testCompile group: 'org.mockito', name: 'mockito-all', version: '1.10.19'
testCompile group: 'org.powermock', name: 'powermock-api-mockito', version: '1.7.4'
testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '1.7.4'
testCompile "org.powermock:powermock-classloading-xstream:1.7.4"

当我尝试运行测试时,它会抛出以下异常

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MyService' Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.mockito.MockSettings.verificationStartedListeners([Lorg/mockito/listeners/VerificationStartedListener;)Lorg/mockito/MockSettings;
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:584)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:273)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1239)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1166)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
... 80 more
 Caused by: java.lang.NoSuchMethodError: org.mockito.MockSettings.verificationStartedListeners([Lorg/mockito/listeners/VerificationStartedListener;)Lorg/mockito/MockSettings;
at org.springframework.boot.test.mock.mockito.SpyDefinition.createSpy(SpyDefinition.java:100)
at org.springframework.boot.test.mock.mockito.MockitoPostProcessor.createSpyIfNecessary(MockitoPostProcessor.java:355)
at org.springframework.boot.test.mock.mockito.MockitoPostProcessor$SpyPostProcessor.postProcessAfterInitialization(MockitoPostProcessor.java:489)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:434)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1749)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
... 89 more

【问题讨论】:

  • 你使用的是什么版本的 Spring Boot?
  • @Andy WilKinson ,我使用 2.1.0.RELEASE 弹簧靴
  • 移除那些依赖,使用spring-boo-starter-test作为依赖。您正在使用旧版本的 Mockito 和相关框架。你真的需要power mock吗?
  • 是的,我的测试中需要 powermock

标签: spring-boot mockito integration-testing powermockito


【解决方案1】:

要使用@MockBean@SpyBean,Spring Boot 2.1.0 需要 Mockito 2。您的依赖配置已将 Mockito 降级到 1.10。

我认为你有两个选择:

  1. 避免使用 Powermock,以便您可以使用 @MockBean@SpyBean 所需的最新版本的 Mockito
  2. 避免使用 @MockBean@SpyBean 来满足 Powermock 对旧版本 Mockito 的需求

【讨论】:

    猜你喜欢
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2019-08-10
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多