Указание @SpringBootApplication в @WebMvcTest

#spring #spring-boot #spring-mvc #spring-boot-test

#spring #весна-загрузка #spring-mvc #весна-загрузка-тест

Вопрос:

Использование @WebMvcTest автоматически настроит все компоненты веб-уровня путем поиска @SpringBootConfiguration класса (такого как @SpringBootApplication ).

Если класс конфигурации находится в другом пакете и не может быть найден путем сканирования, могу ли я предоставить его напрямую @WebMvcTest ?

Ответ №1:

Следующее будет указывать на правильный @SpringBootApplication класс:

 @RunWith(SpringJUnit4ClassRunner.class)
@WebMvcTest(controllers = {MyController.class})
@ContextConfiguration(classes={MySpringBootApplicationClass.class})
public class MyControllerTest {
    //...
}
  

Ответ №2:

Если вы используете @WebMvcTest для своего теста, это означает, что вы сосредоточены главным образом на тестировании слоя spring mvc и не углубляетесь в приложение.

Таким образом, эта аннотация может использоваться только тогда, когда тест фокусируется на компонентах Spring MVC. По умолчанию тесты, аннотированные с помощью @WebMvcTest, также автоматически настраивают Spring Security и MockMvc (включая поддержку HtmlUnit WebClient и Selenium WebDriver). Для более детального управления MockMvc можно использовать аннотацию @AutoConfigureMockMvc.Обычно @WebMvcTest используется в сочетании с @MockBean или @Import для создания любых соавторов, требуемых вашими компонентами @Controller.

 import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import({ CustomerConfig.class, SchedulerConfig.class })
public class AppConfig {

}
  

Затем вы можете импортировать этот класс конфигурации, используя @import в @WebMvcTest аннотированном тестовом классе, и компоненты должны быть подобраны spring.

Ссылка: https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTest.html