Rest @WebMvcTest测试中的ApplicationContext异常

Rest @WebMvcTest测试中的ApplicationContext异常,rest,unit-testing,spring-boot-test,Rest,Unit Testing,Spring Boot Test,我有一个SpringBoot应用程序(1.5.10.RELEASE),其中包含一个主应用程序(SpringBootApplication),如下所示: @springboot应用程序 @配置 @EntityScan(basePackages={“db.model”,“db.model.base”}) @ComponentScan(basePackages={“de.gui.test”}) 公共类SpringBootConsoleApplication{ 公共静态void main(字符串[]ar

我有一个SpringBoot应用程序(1.5.10.RELEASE),其中包含一个主应用程序(SpringBootApplication),如下所示:

@springboot应用程序
@配置
@EntityScan(basePackages={“db.model”,“db.model.base”})
@ComponentScan(basePackages={“de.gui.test”})
公共类SpringBootConsoleApplication{
公共静态void main(字符串[]args)引发异常{
run(SpringBootConsoleApplication.class,args);
}
}
和两个REST控制器,如下所示:

@RestController
@请求映射(“/as”)
公共类控制器{
@自动连线
私人储蓄;
@RequestMapping(method=RequestMethod.GET)
公众反应{
返回新的ResponseEntity(orgtfarbereposition.findAll(),HttpStatus.OK);
}
@RequestMapping(value=“/{id}”,method=RequestMethod.GET)
公共响应属性getA(@PathVariable long id){
A=一个假定的findOne(id);
如果(参与方!=null){
返回新的ResponseEntity(ARepository.findOne(id),HttpStatus.OK);
}否则{
返回新的ResponseEntity(null,HttpStatus.NOT_FOUND);
}
}
}
此外,我还有一个这样的测试:

@RunWith(SpringRunner.class)
@WebMvcTest(AController.class)
公共类控制器测试{
@自动连线
私有MockMvc;
@蚕豆
私人储蓄;
@试验
public void firstTest()引发异常{
A=新的aFarbe();
a、 设置。。。。
when(ARepository.findAll()).thenReturn(Collections.singleton(a));
mvc.perform(
获取(“/as”)
.accept(MediaType.APPLICATION\u JSON\u UTF8\u值)
)
.andExpect(status().isOk());
}
}
存储库如下所示:

公共接口ARepository扩展了Crudepository
{
集合findAll();
}
公共接口BRepository扩展了CRUDepository
{
集合findAll();
}
A和B本身是JPA注释类。整个应用程序包含对数据库的访问

此外,我还有这样的服务:

@服务
公共类XService{
私有静态最终记录器Logger=LoggerFactory.getLogger(XService.class);
@自动连线
私人储蓄;
@自动连线
私人储蓄;
...
}
XService不是通过@Autowire或其他方式使用的(只需删除该项):

因此,我尝试运行AControllerTest,但出现以下错误:

java.lang.IllegalStateException:无法在处加载ApplicationContext org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) .. .. 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206) 原因: org.springframework.beans.factory.unsatifiedDependencyException: 创建名为“XService”的bean时出错:未满足依赖关系 通过字段“BRepository”表示;嵌套异常是 org.springframework.beans.factory.noSuchBean定义异常:否 “BRepository”类型的合格bean可用:至少应为1 符合autowire候选资格的bean。依赖项批注: {@org.springframework.beans.factory.annotation.Autowired(required=true)} .. .. 在 org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:120) 在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) 在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) ... 又有26宗由以下原因引致: org.springframework.beans.factory.noSuchBean定义异常:否 “BRepository”类型的合格bean可用:至少应为1 符合autowire候选资格的bean。依赖项批注: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) 在 org.springframework.beans.factory.annotation.AutoWiredNotationBeanPostProcessor$AutoWiredFeldElement.inject(AutoWiredNotationBeanPostProcessor.java:585) ... 44多


我的假设是,在测试过程中,启动的上下文比应该的要多。问题是我怎样才能防止这种情况发生?这意味着只需要开始AControler的上下文,而不需要更多?我认为基于
@WebMvcTest(AController.class)
它应该已经受到限制,看起来情况并非如此……

参考答案并没有真正回答我的问题,但a在上下文a中给出了解决方案。这意味着在我的测试中添加以下内容:

因此,我必须添加
@OverrideAutoConfiguration(enabled=true)

@RunWith(SpringRunner.class)
@WebMvcTest(OrgtFarbenController.class)
@OverrideAutoConfiguration(已启用=真)
公共类控制器测试{
...
}

参考答案并没有真正回答我的问题,但a在上下文a中给出了解决方案。这意味着在我的测试中添加以下内容:

因此,我必须添加
@OverrideAutoConfiguration(enabled=true)

@RunWith(SpringRunner.class)
@WebMvcTest(OrgtFarbenController.class)
@OverrideAutoConfiguration(已启用=真)
公共类控制器测试{
...
}