Насмешливый актерский состав - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь проверить событие приведения:

Определения:

private RestAPIAuthenticationFilterMod re;
ServletRequest sRequestMock;
ServletResponse sResponseMock;

@Before
public void setup() {
    re=new RestAPIAuthenticationFilterMod();
    sRequestMock  = Mockito.mock(ServletRequest.class,  withSettings().extraInterfaces(HttpServletRequest.class));
    sResponseMock = Mockito.mock(ServletResponse.class, withSettings().extraInterfaces(HttpServletResponse.class));
}

Строка с проблемами:

 ((HttpServletRequest) request).getHeader("CuentaUsuario");

"запрос" - это макети я хочу сгенерировать ответ "JMUNOZ"

Я пробовал это, но он продолжает выполнять реальный код:

    @Test
    public void onAccessDeniedNotAuthorizedIsJWTLogInAttemptTest() throws Exception {


    Subject subjectUnderTest = Mockito.mock(Subject.class);

    setSubject(subjectUnderTest);
    when(subjectUnderTest.isAuthenticated()).thenReturn(true);
    when((sRequestMock).getAttribute("whitelisted")).thenReturn(Boolean.TRUE);

    HttpServletRequestWrapper httpMock= Mockito.mock(HttpServletRequestWrapper.class);
    when((httpMock).getHeader("CuentaUsuario")).thenReturn("JMUNOZ");
    when(((HttpServletRequest)sRequestMock).getHeader("CuentaUsuario")).thenReturn("JMUNOZ");
    re.onAccessDenied(sRequestMock, sResponseMock);
}

Это мое SUT:

  protected boolean isUserHostCallAttempt(ServletRequest request, ServletResponse response) {
    try {
        String userName = ((HttpServletRequest) request).getHeader("CuentaUsuario");
        return (userName != null) && (!"".equalsIgnoreCase(userName)) && (isWhiteListed(request));
    } catch (Exception e) {
        log.error(ERROR, e);
    }
    return false;
}


   private boolean isWhiteListed(ServletRequest request) {
    if (null == request.getAttribute("whitelisted")) {
        return false;
    }
    return ((Boolean) request.getAttribute("whitelisted")).booleanValue();
}

Решение (без утверждений):

 @Test
public void onAccessDeniedNotAuthorizedIsJWTLogInAttemptTest() throws Exception {
    Subject subjectUnderTest = Mockito.mock(Subject.class);
    setSubject(subjectUnderTest);
    when(subjectUnderTest.isAuthenticated()).thenReturn(true);

    HttpServletRequestWrapper httpMock= Mockito.mock(HttpServletRequestWrapper.class);

    when((httpMock).getAttribute(Mockito.anyString())).thenReturn(Boolean.TRUE);
    when((httpMock).getHeader(Mockito.anyString())).thenReturn("JMUNOZ");
    re.onAccessDenied(httpMock, sResponseMock);
}

Спасибо всем.

1 Ответ

0 голосов
/ 23 января 2019

Тип HttpServletRequestWrapper уже расширяет HttpServletRequest, поэтому вы можете напрямую смоделировать httpMock.getHeader.Не издевайтесь над супертипом отдельно, создайте один макет и используйте его в обоих местах.

...