Spring Boot: отключить защиту для Spring Boot Unit Test

Версия Spring Boot: 2.0.4.RELEASE
Для теста Spring Boot, приведенного ниже, тест возвращает нежелательный ответ 401:

"401" статус, "ошибка": "не авторизован"

Каков наилучший способ отключить Spring Security для тестов?
Я попытался добавить конфигурационное свойство "security.basic.enabled=false" следующим образом:

@SpringBootTest(<br>
    webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,<br>
    classes = TestApp.class,<br>
    properties = {
        "security.basic.enabled=false"
})

А также добавив эту аннотацию к классу:

@AutoConfigureMockMvc(secure = false)

Но, к сожалению, тест все равно возвращает "401" несанкционированный код ошибки.

Оригинальный тест

@RunWith(SpringRunner.class)
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = App.class
)

public class ExampleTest{

@Autowired
public void setup(@LocalServerPort int port) {
    RestAssured.port = port;
}

@Test
public voidtestMethod() {
// This test code is not important to my question.     
given().log().all().get("/resources").then().log().all().statusCode(HttpURLConnection.HTTP_BAD_REQUEST).body("error", equalTo("invalid_request")).body(not(containsString("error_reason")));
}
}

Класс, тестируемый модулем, прост:

@SpringBootApplication
@RestController
public class App {
@GetMapping("/resources")
public String[] resources(
        @RequestParam("mandatory_param") String mandatory,
        @RequestParam("valid_param") @NotNull String validParam) {
    return new String[]{"1", "2"};
}
...
}

Кто-нибудь знает, как отключить пружинную безопасность для теста? Спасибо

1 ответ

Используя оба @SpringBootTest со случайным портом и @AutoConfiguration может быть проблемой. Ты можешь попробовать:

@RunWith(SpringRunner.class)
@WebMvcTest(App.class)
@AutoConfigureMockMvc(secure = false)
public class ExampleTest{}

или же

@RunWith(SpringRunner.class)
@SpringBootTest
@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class, ManagementSecurityAutoConfiguration.class })
public class ExampleTest{}

Вы можете добавить свой профиль (интеграция) и сделать следующее:

security:
      basic:
        enabled: false

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles(value="integration_test")
public class ExampleTest{}

Обновление: только что нашел аналогичный ответ уже в другом вопросе SO: Отключить безопасность для модульных тестов с весенней загрузкой

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