如何在junit测试中初始化servletContext

时间:2013-09-30 07:14:52

标签: tomcat

在我的项目中,我在ServletContext中初始化配置数据,然后我可以从内存中读取数据,并且它运行良好,但是现在我写了一些junit测试,它无法初始化ServletContext。你能告诉我怎么做吗?

2 个答案:

答案 0 :(得分:4)

有一种模拟servlet的方法:How to mock servlet in spring mvc,但我认为你不需要在servletContext中初始化配置数据,你可以使用A静态变量来存储配置数据,当你启动服务器时你可以初始化它。代码如下:

public class InitProperties {

private static Logger logger = Logger.getLogger(InitProperties.class);

public static Map<String, String> propertiesMap = new HashMap<String, String>();

public static void initProperties(){
    String filePath = FilePathConstant.XXX_CONF;
    Properties props = new Properties();
    InputStream in = null;
    try {
        in = Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath);
        props.load(in);

        Set keySet = props.keySet();

        for(Object o: keySet){
            propertiesMap.put(o.toString(), props.getProperty(o.toString()).toString());
        }
    } catch (Exception e) {
        logger.error("Read property value by key failed!", e);
    } finally {
        try {
            in.close();
        } catch (IOException e) {
            logger.error("Close inputStream failed!", e);
        }

    }
}

}

您只需在启动服务器时调用方法InitProperties.initProperties(),然后就可以从InitProperties.propertiesMap读取配置数据。

答案 1 :(得分:3)

我认为您不需要在servletContext初始化配置数据,您可以使用静态变量来存储配置数据,当您启动服务器时,您可以初始化它。
要在测试环境中设置完整的WebApplicationContext,您可以使用XmlWebApplicationContext(或GenericWebApplicationContext),传入适当的MockServletContext实例。
在这种情况下,您可能希望将MockServletContext配置为FileSystemResourceLoader,以使资源路径被解释为相对文件系统位置。