Не знаю, актуально ли это, но я наткнулся на ту же проблему.После этого мы добавили аутентификацию по ключу API в API REST, и все тесты (в основном с @AutoConfigureMockMvc) необходимо было скорректировать с использованием надлежащего API (поверх новых тестов, проверяющих работоспособность ключей).
Spring использует шаблон Customizer и Builders также при создании MockMvc, как это делается с RestTemplateBuilder и RestTemplateCustomizer.
Вы можете создать компонент @ Bean / @, который является org.springframework.boot.test.autoconfigure.web.servlet.MockMvcBuilderCustomizer
, и он будетполучить в процессе начальной загрузки ваших @ SpringBootTests.
Затем вы можете добавить родительский defaultRequetsBuilders, который объединяется с конкретными RequestBuilders при запуске теста.
Образец Customizer, который добавляет заголовок
package foobar;
import org.springframework.boot.test.autoconfigure.web.servlet.MockMvcBuilderCustomizer;
import org.springframework.stereotype.Component;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.ConfigurableMockMvcBuilder;
/**
* Whenever a mockmvc object is autoconfigured, this customizer should be picked up, and a default, usable, working, valid api key is set as
* default authorization header to be applied on all tests if not overwritten.
*
*/
@Component
public class ApiKeyHeaderMockMvcBuilderCustomizer implements MockMvcBuilderCustomizer {
@Override
public void customize(ConfigurableMockMvcBuilder<?> builder) {
// setting the parent (mergeable) default requestbuilder to ConfigurableMockMvcBuilder
// every specifically set value in the requestbuilder used in the test class will have priority over
// the values set in the parent.
// This means, the url will always be replaced, since "any" would not make any sense.
// In case of multi value properties (like headers), existing headers from our default builder they are either merged or appended,
// exactly what we want to achieve
// see https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/web/servlet/MockMvcBuilderCustomizer.html
// and https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/Mergeable.html
RequestBuilder apiKeyRequestBuilder = MockMvcRequestBuilders.get("any")
.header("api-key-header", "apikeyvalue");
builder.defaultRequest(apiKeyRequestBuilder);
}
}
Надеюсь, что поможет.