Spring Boot登录测试始终返回空Optional问题求助
问题排查思路
核心错误:错误Mock了UserService
你在测试类里把UserService标记为@Mock,这意味着你调用的是Mockito生成的Mock对象,而非真实的UserService实例。Mock对象不会执行你写的loginUser方法逻辑,自然返回空Optional。
修正方案
调整测试类的Mock配置,让真实的UserService实例被注入,同时将依赖的UserRepository和PasswordEncoder作为Mock提供:
@ExtendWith(MockitoExtension.class) public class UserServiceTest { @InjectMocks // 注入真实的UserService实例,依赖由下方Mock填充 private UserService userServiceTest; @Mock private UserRepository userRepositoryTest; @Mock private PasswordEncoder passwordEncoder; // 移除不需要的UserController注入(当前测试目标是Service) }
额外验证点
- 检查
LoginDTO的getEmail()、getPassword()方法是否正确返回对应字段值,避免拼写或逻辑错误。 - 确认
User类的getPassword()方法能正确返回密码属性,排查是否存在字段与方法名不匹配的情况。 - 可以在测试中添加打印日志,验证
loginDTO的字段值、userRepositoryTest.findByEmail的返回值是否符合预期,确保Mock逻辑被正确触发。
内容的提问来源于stack exchange,提问作者Zeke Cachi
相关产品推荐
相关产品推荐

