次の呼び出しを行う struts アクション Java メソッドがテストされている Maven を介して JUnit テストを実行しています。
// 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(...)" は、"params" が null であるため、NullPointerException をスローします。
このアクションが正常に呼び出されると、これは正常に実行されます。ただし、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 を返す理由は何ですか?