#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.