找不到web.xml。模拟struts测试用例

时间:2012-11-26 18:13:06

标签: java junit mocking struts web.xml

这是我的项目目录结构:

TOPS-WEB
      |___
      |    Java Resources
      |___ 
           WebContent
                 |____
                      WEB-INF
                            |____
                            |    web.xml
                            |____  
                            |    lib
                            |       |__
                            |          strutstest-2.1.4.jar
                            |____
                                 struts
                                      |__
                                         struts-info-config.xml 

当我运行测试时,我收到以下错误。这个错误是由行抛出的 testInfo()方法中的setServletConfig(...)。

ERROR [main] org.apache.struts.action.ActionServlet initServlet - The /WEB-INF/web.xml was not found.
ERROR [main] org.apache.struts.action.ActionServlet init - Unable to initialize Struts ActionServlet due to an unexpected exception or error thrown, so marking the servlet as unavailable.  Most likely, this is due to an incorrect or missing library dependency.

我的测试班

public class MyTest extends MockStrutsTestCase{

    @Override
    protected void setUp() throws Exception {
        super.setUp();           
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public MyTest(String testName){
        super(testName);
    }

    public void testInfo(){         
        setContextDirectory(new File("TOPS-WEB/WebContent"));       
        setConfigFile(this.getSession().getServletContext().getRealPath("/WEB-INF/struts/struts-info-config.xml"));         
        *setServletConfigFile(this.getSession().getServletContext().getRealPath("/WEB-INF/web.xml"));*
        setRequestPathInfo("/infoPopup");
        actionPerform();            
        }    
    }

我看到有些地方提到你必须使用maven,但我不是。我只需右键单击测试类并将其作为junit运行。这可能是原因吗?

1 个答案:

答案 0 :(得分:2)

您的问题是您正在将上下文目录(使用setContextDirectory)设置为不存在的路径。

new File(string),当string是相对路径名时,将解析为相对于当前工作目录的路径名。那么,您假设当前工作目录是Tomcat放置其爆炸WAR文件的父目录。

打印此:

System.out.println(System.getProperty("user.dir"))

您将获得该进程的当前工作目录。然后,相应地调整setContextDirectory