You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:06:50