4

次の呼び出しを行う 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 を返す理由は何ですか?

4

1 に答える 1