Spring Boot用户控制器单元测试报错:缺少RoleRepository Bean
问题解决:NoSuchBeanDefinitionException for RoleRepository
错误原因
你的UserController中同时注入了UserRepository和RoleRepository两个依赖,但在单元测试类UserControllerTest里只通过@MockBean声明了UserRepository的Mock实例,Spring测试上下文无法找到RoleRepository的候选Bean,因此抛出该异常。
解决方法
有两种可行的处理方式:
方式一:为RoleRepository添加@MockBean
直接在测试类中为RoleRepository也添加@MockBean注解,让Spring生成对应的Mock实例注入到控制器中:
public class UserControllerTest { @Autowired private MockMvc mockMvc; @Autowired private ObjectMapper mapper; @MockBean private UserRepository repository; // 添加该行,生成RoleRepository的Mock实例 @MockBean private RoleRepository roleRepository; }
方式二:手动构建MockMvc(轻量化测试)
如果不想依赖Spring上下文自动配置,可通过Mockito手动初始化控制器并注入Mock依赖:
@ExtendWith(MockitoExtension.class) public class UserControllerTest { private MockMvc mockMvc; @Mock private UserRepository repository; @Mock private RoleRepository roleRepository; @InjectMocks private UserController userController; @BeforeEach void setUp() { // 手动构建MockMvc mockMvc = MockMvcBuilders.standaloneSetup(userController).build(); } }
这种方式无需@Autowired注入MockMvc和ObjectMapper,完全由Mockito管理依赖,测试更轻量化。
内容的提问来源于stack exchange,提问作者Muhammad Rizwan
相关产品推荐
相关产品推荐

