我正在通过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?
答案 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);