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

JUnit5 Mockito测试实例化UserPojo报构造函数未定义异常

问题原因

编译报错本质是类型不匹配:UserPojo全参构造的第8个参数定义为LocalDateTime类型,但你初始化对象时直接传入了字符串值"2022-06-25T22:37:24.894"。Java是强类型语言,String和LocalDateTime不存在隐式转换,编译器找不到参数列表匹配的构造方法,就会抛出构造函数未定义的错误。UserEntity的初始化代码存在完全相同的问题。

修复方法

测试场景下传入LocalDateTime类型参数不需要特殊配置,只需要把日期值显式转为LocalDateTime实例再传入构造函数即可,常用两种写法:

  • 固定时间值:用LocalDateTime.parse()解析预设的日期字符串,适合后续断言需要严格匹配时间的场景
  • 动态时间值:用LocalDateTime.now()取测试运行时的当前时间,适合不需要校验具体时间字段的场景
修正后的测试初始化代码
@ExtendWith(MockitoExtension.class)
public class LoginAndRegisterTest {
    
    @Mock
    UserDao userDao;
    
    @InjectMocks
    UserServiceImpl userService;
    
    private UserPojo expectedPojo;
    private UserEntity dummyEntity;
    
    @BeforeEach
    public void setup() {
        // 解析字符串得到LocalDateTime实例
        LocalDateTime testRegisterTime = LocalDateTime.parse("2022-06-25T22:37:24.894");
        expectedPojo = new UserPojo(1, "Goldendeep", "golden@coolkids.com", "333-343-3434", "golden", "kaur11", false, testRegisterTime, 2);
        // 若UserEntity对应字段也是LocalDateTime类型,同样传入解析后的实例,禁止直接传字符串
        dummyEntity = new UserEntity(1, "Goldendeep", "golden@coolkids.com", "333-343-3434", "golden", "kaur11", false, testRegisterTime, 2);
    }
}

补充说明:如果你使用的日期字符串不是默认支持的ISO标准格式(即yyyy-MM-ddTHH:mm:ss.SSS),需要自定义格式化器匹配字符串格式,示例如下:

// 匹配yyyy-MM-dd HH:mm:ss格式的日期字符串
DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime customTime = LocalDateTime.parse("2022-06-25 22:37:24", customFormatter);

内容的提问来源于stack exchange,提问作者Joshua Hebert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:09:21