Java 嘲弄西罗';使用PowerMock的SecurityUtils中的静态方法

Java 嘲弄西罗';使用PowerMock的SecurityUtils中的静态方法,java,unit-testing,easymock,powermock,shiro,Java,Unit Testing,Easymock,Powermock,Shiro,大家好,我正试图模仿Shiro软件包中的静态方法 org.apache.shiro.mgt.SecurityManager securityManager = EasyMock.createNiceMock(org.apache.shiro.mgt.SecurityManager.class); SecurityUtils.setSecurityManager(securityManager); PowerMock.mockStatic(SecurityUtils.c

大家好,我正试图模仿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
读到这一点,解算应该是reply方法,但它不起作用。以前有人看到过这一点吗,或者有人对如何在Shiro SecurityUtils中模拟静态方法有什么建议吗

干杯这解决了我的问题

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

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

问题不在于您期望调用一次,但又调用了两次吗?请尝试将
.times(2)
添加到
getSubject()
的期望末尾,添加对我没有任何实际作用的内容。我在这里有两个调用来触发异常,因为它第一次有效,但第二次无效