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

Shiro测试使用Mockito时报expect(boolean)方法未定义错误如何解决?

问题描述

我正在开展首次Java测试,使用了Shiro Security组件,遵循官方教程操作时遇到如下问题:
官方示例使用EasyMock实现,同时说明Mockito也可同等适配,示例代码如下:

Subject subjectUnderTest = createNiceMock(Subject.class);
expect(subjectUnderTest.isAuthenticated()).andReturn(true);

由于我使用的是Mockito,我按照如下代码实现:

Subject mockSubject = mock(Subject.class);
expect(subjectUnderTest.isAuthenticated()).andReturn(true);

但运行时出现以下报错:

The method expect(boolean) is undefined for the type AdminControllerTest

编辑器没有提供该方法的导入选项,我不清楚expect是否为EasyMock的特有方法,如果是的话,在Mockito中应该使用什么对应方法实现?


问题解答

expect是EasyMock专属的API,Mockito框架未提供该方法,你出现报错正是因为直接复用了EasyMock的语法。
你代码里还存在变量名不匹配的问题:你定义的模拟Subject变量名为mockSubject,但调用isAuthenticated()方法时用的是EasyMock示例里的变量名subjectUnderTest,即便语法适配后也会触发变量未定义的报错。

Mockito对应expect(xxx).andReturn(yyy)的桩方法语法为when(xxx).thenReturn(yyy),正确实现代码如下:

// 导入所需的Mockito静态方法
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

// 测试方法内的逻辑
Subject mockSubject = mock(Subject.class);
// 为模拟对象的isAuthenticated方法设置返回值
when(mockSubject.isAuthenticated()).thenReturn(true);

后续你可以直接按照Shiro官方测试教程的后续步骤,将该模拟对象绑定到当前线程上下文即可开展后续测试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:45:05