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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:42:09