Struts 2 JUnit插件和多个struts配置文件

时间:2011-03-08 13:36:35

标签: java junit struts2

在浏览网页几个小时后寻找这个问题的答案后,我最终决定在这里发布问题。

我正在使用struts 2 junit插件来测试struts 2应用程序的一些操作。主struts配置文件(struts.xml)是这样的:

<struts>
    <package name="default" extends="struts-default">

    </package>

    <include file="/com/jmc/textil/productcard/action/productcard.xml"/>
    <!--More includes...-->

</struts>

productcard.xml文件:

<struts>
        <!--Some other packages...-->

        <package name="productClasification" namespace="/productClasification" extends="default">
        <!--More actions...-->
            <action name="edit" method="edit" class="com.jmc.textil.productcard.action.ProductClasificationAction">
                <result>/main/jsp/json_struts2.jsp</result>
            </action>
        </package>

    </struts>

我有一个扩展StrutsTestCase的测试类,以及一个用于“/ productClasification / edit”操作的测试方法。进行以下调用时:

 ActionProxy proxy = getActionProxy("/productClasification/edit.action");
 ProductClasificationAction clasificationAction = 
                        (ProductClasificationAction) proxy.getAction();

抛出异常,因为无法找到该操作。默认情况下,StrutsTestCase使用struts.xml但是其他struts配置xml文件呢?

提前致谢。

1 个答案:

答案 0 :(得分:3)

所以我花了过去5个小时来研究这个问题,终于找到了解决方案。基本上,您需要重写StrutsTestCase setUp方法,并为要添加的每个配置文件添加一个新的StrutsXmlConfigurationProvider。请注意,配置提供程序足够聪明,可以遍历include语句,因此,如果您的配置“树”只有一个根,则只需添加该根。

示例实现:

@Override
public void setUp() throws Exception {
    super.setUp();
    List<ContainerProvider> providers = super.configurationManager.getContainerProviders();
    //make one of these for each config file you want to add
    StrutsXmlConfigurationProvider newConfig = new StrutsXmlConfigurationProvider("src/main/webapp/WEB-INF/classes/struts.xml", true, super.servletContext);
    providers.add(newConfig);
    super.configurationManager.reload();
}

如果您的项目中有很多动作,那么可能值得花时间创建扩展StrutsTestCase的基础测试类,并让所有动作测试都对其进行扩展。