@WebMvcTest 在 Spring Boot 测试中为不同服务提供“Error Creating bean with name”错误

Posted

技术标签:

【中文标题】@WebMvcTest 在 Spring Boot 测试中为不同服务提供“Error Creating bean with name”错误【英文标题】:@WebMvcTest giving 'Error creating bean with name' error for different service in spring boot test 【发布时间】:2018-02-20 12:52:18 【问题描述】:

我正在尝试为我的 Spring Boot 应用程序编写测试。对于独立控制器测试,我使用了@WebMvcTest,但遇到了一些问题。这是代码的基本结构。

UserController 具有自动装配的 UserService 类。

LibraryController 具有自动装配的 LibraryService 类。

这是 UserControllerTest 的代码 ::

@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
public class UserControllerTest 
   @Autowired
   private MockMvc mockMvc;
   
   @MockBean
    private UserService userServiceMock;

   @Test
   public void someTest()


在 UserControllerTest 中运行代码时出现错误:

原因: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“libraryController”的 bean 时出错:不满意 通过字段“libraryService”表达的依赖关系;嵌套的 org.springframework.beans.factory 例外

根据我的理解,由于我们在 @WebMvcTest 注释中指定了 UserController,我们只需要模拟该控制器所需的依赖项。但它要求与用户控制器没有链接的 libraryService。

是的,如果我们将库服务作为 MockBean 包含在测试中,那么它可以正常工作。但如果是这种情况,我们必须在程序扩展时模拟每个自动装配的 bean。

感谢任何解释。提前致谢。

【问题讨论】:

您的假设是正确的。您只需要模拟 UserController 类自动装配字段。但它可能是UserService 使用LibraryController。可以分享UserService吗? 对不起@barbakini,但我无法共享用户服务。这些类实际上不存在,这些是用于解释我面临的问题的假定类。我的代码很大而且服务很多,但我可以确保 userService 与 libraryService 和 libraryController 没有依赖关系。 好的,我发现了问题,但我安静不明白。任何解释表示赞赏。我有实现接口 Interface1 的 Service1 和实现 interface2 的 service2。所以 userService 需要 service1 并且我在 usercontrollertest 中使用 Interface1 作为 mockbean,所以当我将 service1 替换为 mockbean 而不是它的接口时,它解决了这个问题。为什么我们不能使用接口作为mockbean?我必须专门使用该服务才能使其工作...... 【参考方案1】:

您可能已经在主类上定义了以下注释之一:@ComponentSacn、@EnableJpaRepositores 和 @EntityScan。

例如,通过在主类上放置 @EnableJpaRepositores,您表明必须始终启用 JPA 存储库,无论您尝试测试哪个特定功能部分。这同样适用于@ComponentScan 和@EntityScan。

【讨论】:

以上是关于@WebMvcTest 在 Spring Boot 测试中为不同服务提供“Error Creating bean with name”错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 1.4 MVC 测试中使用 @WebMvcTest 设置 MockMvc

@WebMvcTest 在 Spring Boot 测试中为不同服务提供“Error Creating bean with name”错误

@MockBean 不适用于带有 JUnit 5 和 Spring Boot 2 的 @WebMvcTest?

Spring Boot 2 @WebMvcTest 和 OAuth2 #oauth2.hasScope 控制器导致 IllegalArgumentException

spring boot test中如何配置HandlerMethodArgumentResolver

SpringBoot @WebMvcTest,自动装配 RestTemplateBuilder