@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