需求
springboot项目启动配置过多,每次启动测试类需要加载整个环境配置,导致启动缓慢,不利于快速测试,部分场景只需要少量以来配置,因此可自定义加载配置。
方法
这里以测试controller为例,由于只测试controller,因此可以不需要启动什么数据库、缓存之类的,只需要加载基础的bean对象即可。
package org.**.aop;
import org.**.controller.LogController;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.*;
import org.springframework.test.web.servlet.result.*;
@WebMvcTest(LogController.class)
@ContextConfiguration(classes = Configuration.class)
class LogAspectTest {
@Autowired
private MockMvc mvc;
@Test
void given_login_when_request_then_save_this_request() {
Assertions.assertTrue(true);
}
}
package org.**.aop;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigurationExcludeFilter;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
/**
* @author wanghengzhi
* @since 2021/11/8 15:18
*/
@SpringBootConfiguration
@ComponentScan(excludeFilters = { @ComponentScan.Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@ComponentScan.Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) },
basePackages = "org.**")
public class Configuration {
}
方法梳理:
在测试类中,指定启动spring环境上下文配置,并指向自定义配置文件,这里配置文件类似于springboot默认启动类,可以在这里配置依赖配置。