在application.yml中有以下参数:
server:
context-parameters:
appCode: MYAPPCODE
此参数由第三方库读取。在嵌入式Tomcat上运行时,该参数在ServletContext中可用。但是,在SpringRunner上运行测试时,ServletContext没有参数。
以下是测试类的相关部分。
@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
@AutoConfigureMockMvc
public class RestControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
private void create() {
String content = createContent();
mockMvc.perform(post("/api/entity/create").content(content))
.andExpect(jsonPath("id").isNumber());
}
}
如何配置测试类,以便使用application.yml中的上下文参数设置模拟的ServletContext?
目前,为了解决这个问题,我在测试类中做了以下解决方法。
@Autowired
private ServletContext servletContext;
@Autowired
private ServerProperties serverProperties;
@Before
public void setup() throws Exception {
Map<String, String> params = serverProperties.getContextParameters();
new InitParameterConfiguringServletContextInitializer(params)
.onStartup(servletContext);
}
答案 0 :(得分:0)
如何配置测试类以便模拟
中的上下文参数设置的ServletContext
是使用application.yml
?
AFAIK,使用WebEnvironment.MOCK
时目前无法实现(即@SpringBootTest
的默认模式),因为Spring Boot配置的MockServletContext
使用的WebApplicationContext
是普通香草(即没有填充外部值)。
因此,您的“解决方法”是唯一的解决方案。