@RefreshScope - JUnit 测试用例

问题描述 投票:0回答:3

我正在尝试使用 JUNIT 测试用例测试我的控制器,但发现以下异常

Caused by: java.lang.IllegalStateException: No Scope registered for scope name 'refresh'
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.aop.target.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.java:35)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.getTarget(CglibAopProxy.java:705)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
spring-mvc spring-boot junit4
3个回答
37
投票

尝试放入您的测试文件:

@ImportAutoConfiguration(RefreshAutoConfiguration.class)

3
投票

当我使用@WebMvcTest(用于测试用例)和@RefreshScope(用于配置)时,我遇到了同样的问题

解决方案:使用

@SpringBootTest

而不是

@WebMvcTest

原因:RefreshScope需要完整的容器才能工作,而当我们使用WebMvcTest时,它不使用完整的容器。 WebMvcTest 不会加载 spring 的所有配置。可能是因为这个原因,RefreshScope 没有加载。


0
投票

您需要将 RefreshScope bean 添加到您的 @Configuration 类中:

import org.springframework.cloud.context.scope.refresh.RefreshScope;

@Configuration
public class AppConfig {
    @Bean
    public RefreshScope refreshScope() {
        return new RefreshScope();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.