Как написать модульный тест для пользовательского перехватчика шаблона Rest при весенней загрузке

У меня есть следующий пользовательский перехватчик в моем приложении Java Spring, как показано ниже.

public class AuthInterceptor implements ClientHttpRequestInterceptor {

    private final String encodedCredentials;

    public AuthInterceptor(String username, String password) {
        this(username, password, (Charset) null);
    }

    public AuthInterceptor(String username, String password, @Nullable Charset charset) {
        this.encodedCredentials = HttpHeaders.encodeBasicAuth(username, password, charset);
    }

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        HttpHeaders headers = request.getHeaders();
        headers.setBasicAuth(this.encodedCredentials);
        return execution.execute(request, body);
    }

}

Но я ищу документацию о том, как написать модульный тест для этого класса, и не смог найти. Любая информация о том, как тестировать, была бы действительно полезной.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
29
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Модульное тестирование этого класса так же, как и модульное тестирование любого класса.

  1. classToTest = новый AuthInterceptor()
  2. Вызовите метод с фиктивными объектами.

Некоторый пример кода:

@ExtendWith(MockitoExtension.class)
public class TestAuthInterceptor
{
    private AuthInterceptor classToTest;

    @Mock
    private ClientHttpRequestExecution mockClientHttpRequestExecution;
    
    @Mock
    private ClientHttpResponse mockClientHttpResponse;
    
    @Mock
    private HttpHeaders mockHttpHeaders;
    
    @Mock
    private HttpRequest mockHttpRequest;

    @BeforeEach
    public void beforeEach()
    {
        classToTest = new AuthInterceptor("username", "password");
    }
    
    @Test
    public void intercept_allGood_success()
    {
        final ClientHttpResponse actualResult;
        final byte[] inputBody = null;
        
        doReturn(mockHttpHeaders).when(mockHttpRequest).getHeaders();
        doReturn(mockClientHttpResponse).when(mockClientHttpRequestExecution).execute(mockHttpRequest, inputBody);


        actualResult = classToTest.intercept(mockHttpRequest, inputBody, mockClientHttpRequestExecution);
        

        assertSame(mockClientHttpResponse, actualResult);
        // other asserts as desired.
    }
}
Ответ принят как подходящий

Предположим, вы хотите только протестировать перехват и уже настроили mockito:

 @Test
  @DisplayName("Should add correct header to authorization")
  void encodeProperly() throws Exception {
    AuthInterceptor cut  = new AuthInterceptor("someuserName","somePaswwordName");

    MockHttpServletRequest request = new MockHttpServletRequest("GET", "/test");
    cut.intercept(request, null,null,mockedExecution );

    ArgumentCaptor<HttpRequest> argumentCapture = ArgumentCaptor.forClass(HttpRequest.class) ;
    verify(mockedExecution.execute(argumentCapture.capture(),any()));
    
    assertEquals(expectedEncodedCredentials,argumentCapture.getValue().getHeaders().get(HttpHeaders.AUTHORIZATION));
  }

Итак, шаги: создайте свой класс для пробного разреза

затем создайте макет MockHttpServletRequest, это будет полезно для проверки

Другие вопросы по теме