ActionContext.getContext()。getParameters()在StrutsJUnit4TestCase期间返回null

时间:2014-01-22 18:33:11

标签: maven struts2 junit actioncontext struts2-junit-plugin

我正在通过maven运行JUnit测试,其中正在测试struts action java方法,以便进行以下调用:

// Gets this from the "org.apache.struts2.util.TokenHelper" class in the struts2-core jar
String token = TokenHelper.getTokenName();

以下是“TokenHelper.java”中的方法:

/**
 * Gets the token name from the Parameters in the ServletActionContext
 *
 * @return the token name found in the params, or null if it could not be found
 */
public static String getTokenName() {

    Map params = ActionContext.getContext().getParameters();

    if (!params.containsKey(TOKEN_NAME_FIELD)) {
        LOG.warn("Could not find token name in params.");

        return null;
    }

    String[] tokenNames = (String[]) params.get(TOKEN_NAME_FIELD);
    String tokenName;

    if ((tokenNames == null) || (tokenNames.length < 1)) {
       LOG.warn("Got a null or empty token name.");

        return null;
    }

    tokenName = tokenNames[0];

    return tokenName;
}

此方法的第一行返回null

Map params = ActionContext.getContext().getParameters();

下一个LOC,“params.containKey(...)”抛出NullPointerException,因为“params”为空。

正常调用此操作时,运行正常。但是,在JUnit测试期间,会出现此Null指针。

我的测试类看起来像这样:

@Anonymous
public class MNManageLocationActionTest extends StrutsJUnit4TestCase {

    private static MNManageLocationAction action;

    @BeforeClass
    public static void init() {
        action = new MNManageLocationAction();
    }

    @Test
    public void testGetActionMapping() {
        ActionMapping mapping = getActionMapping("/companylocation/FetchCountyListByZip.action");
        assertNotNull(mapping);
    }

    @Test
    public void testLoadStateList() throws JSONException {
        request.setParameter("Ryan", "Ryan");

        String result = action.loadStateList();

        assertEquals("Verify that the loadStateList() function completes without Exceptions.", 
              result, "success");
    }
}

切换到使用StrutsJUnit4TestCase后,ActionContext.getContext()至少不再为null。

知道为什么.getParameters()返回null?

1 个答案:

答案 0 :(得分:2)

您需要在测试方法中自己初始化参数map。此外,如果您想获得令牌名称,您需要将其放在参数图中。

Map<String, Object> params = new HashMap<String, Object>();
params.put(TokenHelper.TOKEN_NAME_FIELD, 
                       new String[] { TokenHelper.DEFAULT_TOKEN_NAME });
ActionContext.getContext().setParameters(params);