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

使用EasyMock编写JUnit时触发java.lang.IllegalStateException问题求助

问题排查与解决

java.lang.IllegalStateException在EasyMock中通常和mock对象的生命周期、参数匹配错误有关,针对你的场景,从以下几个方向排查修复:

1. 确认mock对象的创建方式

必须确保empDao是通过EasyMock的官方方法创建的mock实例,不能用真实对象或其他非EasyMock创建的实例:

EmpDao empDao = EasyMock.createMock(EmpDao.class); // 或createStrictMock

2. 检查调用顺序是否合规

绝对不能在replay(empDao)之后再调用EasyMock.expect(...),你的代码里虽然是先expect再replay,但要确认之前没有提前调用过replay方法。

3. 修正泛型参数的匹配器

第三个参数是List<String>,用EasyMock.anyObject(List.class)会存在泛型匹配模糊的问题,建议换成精准匹配:

// 方式1:用anyList()自动适配泛型
EasyMock.expect(empDao.getEmployeeId(EasyMock.anyLong(),  
                                     EasyMock.anyObject(Date.class),
                                     EasyMock.anyList()))
        .andReturn(empIdList).anyTimes();

或者:

// 方式2:指定泛型的anyObject
EasyMock.expect(empDao.getEmployeeId(EasyMock.anyLong(),  
                                     EasyMock.anyObject(Date.class),
                                     EasyMock.<List<String>>anyObject()))
        .andReturn(empIdList).anyTimes();

4. 确保返回对象已初始化

提前初始化empIdList避免后续测试异常:

List<Long> empIdList = Arrays.asList(1L, 2L, 3L);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:52:31