使用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
相关产品推荐
相关产品推荐

