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: Отключить безопасность для модульных тестов с весенней загрузкой