2013-09-30 208 views
4

在我的项目初​​始化参数servletContext,我在ServletContext的初始化配置数据,那么我就可以从内存中读取数据,并将其效果不错,但现在我写了一些JUnit测试,它无法初始化ServletContext中。你能告诉我该怎么办?如何在JUnit测试

回答

3

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

4

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

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读取配置数据。