在application.yml中使用servlet参数测试spring boot应用程序

时间:2018-02-09 15:00:00

标签: spring spring-boot spring-test

在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);
}

1 个答案:

答案 0 :(得分:0)

  

如何配置测试类以便模拟ServletContext   是使用application.yml

中的上下文参数设置的

AFAIK,使用WebEnvironment.MOCK时目前无法实现(即@SpringBootTest的默认模式),因为Spring Boot配置的MockServletContext使用的WebApplicationContext普通香草(即没有填充外部值)。

因此,您的“解决方法”是唯一的解决方案。