Насмешливый статический метод Широ в SecurityUtils с PowerMock

1

Привет всем, я пытаюсь издеваться над статическим методом из пакета 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?

ура

  • 0
    Проблема не в том, что вы ожидали звонка один раз, а потом звонили дважды? Попробуйте добавить .times(2) в конец ожидания для getSubject()
  • 0
    добавив, что на самом деле ничего не делает для меня. У меня есть 2 вызова здесь, чтобы вызвать исключение, так как оно работает в первый раз, но не второй
Теги:
unit-testing
powermock
shiro
easymock

1 ответ

0

Это решило мою проблему

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню