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

