我正在尝试使用 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)
尝试放入您的测试文件:
@ImportAutoConfiguration(RefreshAutoConfiguration.class)
当我使用@WebMvcTest(用于测试用例)和@RefreshScope(用于配置)时,我遇到了同样的问题
解决方案:使用
@SpringBootTest
而不是
@WebMvcTest
原因:RefreshScope需要完整的容器才能工作,而当我们使用WebMvcTest时,它不使用完整的容器。 WebMvcTest 不会加载 spring 的所有配置。可能是因为这个原因,RefreshScope 没有加载。
您需要将 RefreshScope bean 添加到您的 @Configuration 类中:
import org.springframework.cloud.context.scope.refresh.RefreshScope;
@Configuration
public class AppConfig {
@Bean
public RefreshScope refreshScope() {
return new RefreshScope();
}
}