繁体   English   中英

使用PowerMock在SecurityUtils中模拟Shiro的静态方法

[英]Mocking Shiro's static method in SecurityUtils with PowerMock

大家好,我想从Shiro包中模拟静态方法

    org.apache.shiro.mgt.SecurityManager securityManager = EasyMock.createNiceMock(org.apache.shiro.mgt.SecurityManager.class);

    SecurityUtils.setSecurityManager(securityManager);

    PowerMock.mockStatic(SecurityUtils.class);

    EasyMock.expect(SecurityUtils.getSubject()).andReturn(null);
    PowerMock.replayAll(SecurityUtils.class);
    PowerMock.verify(SecurityUtils.class);

    Subject s = SecurityUtils.getSubject(); // this call returns null
    s = SecurityUtils.getSubject(); // this call fails with exception below

因此,想法是当在我的代码中调用getSubject时,我返回null(我可以将其更改为实际对象,但现在可以使用。

当前的问题是我得到了例外

Usage is: expect(a.foo()).andXXX()
    at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:42)
    at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:94)
    at $Proxy10.createSubject(Unknown Source)
    at org.apache.shiro.subject.Subject$Builder.buildSubject(Subject.java:846)
    at org.apache.shiro.SecurityUtils.getSubject(SecurityUtils.java:56)
    at com.mypackage.services.logic.AbstractHibernateTest.abstractBefore(AbstractHibernateTest.java:94)
null

仔细阅读解决方法应该是答复方法,但是它不起作用。 有没有人看过这个,或者有没有人建议如何在Shiro SecurityUtils中模拟静态方法?

干杯

这解决了我的问题

    SecurityUtils.setSecurityManager(EasyMock.createNiceMock(org.apache.shiro.mgt.SecurityManager.class));

    mockSubject = Mockito.mock(Subject.class);
    threadState = new SubjectThreadState(mockSubject);
    threadState.bind();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM