ActionContext.getContext(). GetParameters() возвращает ноль во время StrutsJUnit4TestCase

Я запускаю тест JUnit через maven, где тестируется Java-метод Struts Action, который выполняет следующий вызов:

// 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;
}

1-я строка в этом методе возвращается null:

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

Следующий LOC вниз, "params.containKey(...)" генерирует исключение NullPointerException, потому что "params" является нулевым.

Когда это действие вызывается нормально, оно работает нормально. Однако во время теста JUnit этот нулевой указатель возникает.

Мой тестовый класс выглядит так:

@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");
    }
}

ActionContext.getContext(), по крайней мере, больше не является нулевым после того, как я переключился на использование StrutsJUnit4TestCase.

Любая идея, почему.getParameters() возвращает ноль?

1 ответ

Вам необходимо самостоятельно инициализировать карту параметров внутри вашего метода тестирования. Кроме того, если вы хотите получить имя токена, вам нужно поместить его в карту параметров.

Map<String, Object> params = new HashMap<String, Object>();
params.put(TokenHelper.TOKEN_NAME_FIELD, 
                       new String[] { TokenHelper.DEFAULT_TOKEN_NAME });
ActionContext.getContext().setParameters(params);
Другие вопросы по тегам