@WebMvcTest 在 Spring Boot 测试中为不同的服务给出“错误创建带有名称的 bean”错误

Mco*_*der 5 java spring spring-mvc spring-boot spring-boot-test

我正在尝试为我的 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(){}

}
Run Code Online (Sandbox Code Playgroud)

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

引起:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“libraryController”的bean时出错:通过字段“libraryService”表达的不满意依赖;嵌套异常是 org.springframework.beans.factory

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

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

任何解释表示赞赏。提前致谢。

Fel*_*ati 3

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

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