使用EasyMock对java Servlet进行单元测试

时间:2014-06-04 09:59:37

标签: java unit-testing servlets testng easymock

我想测试我的servlet抛出一个特定的Exception,我是EasyMock的新手,我不知道我必须嘲笑哪种方法。

这是我的servlet代码:

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    // get request's parameters to execute the query

    Map<String, String> parameters = null;

    // q = query name
    String query = null;
    if (LOGGER.isInfoEnabled()) {

        LOGGER.info("Parameters ({}) :", parameters);
    }

    parameters = transformParams(req);
    PrintWriter out = resp.getWriter();

    if (parameters.get(QUERY_KEY) != null) {

        Resultat resultat = null;

        try {
            resultat = requestService.query(query, parameters);

            // construct file name
            csvConverter.writeToCSV(resultat, new FileOutputStream(
                    generateNameFile(SystemDate.getDate())));


            out.println(QUERY_EXECUTED);

        } catch (RequestNotFoundException e) {
            // request not found
            resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
        } catch (RequestServiceException e) {
            // malformed request
            resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
        }

    }

    out.println(QUERY_NOT_EXECUTED);


}

protected Map<String, String> transformParams(HttpServletRequest req) {
    HashMap<String, String> parameters = new HashMap<String, String>();
    // get query parameters
    for (Object key : req.getParameterMap().keySet()) {
        LOGGER.info("key :", key.toString());

        parameters.put(key.toString(), req.getParameter(key.toString()));
    }

    return parameters;
}

以下是TestNg的结果:

org.testng.TestException: 
Expected exception com.sqltojson.exception.RequestNotFoundException but got
java.lang.IllegalArgumentException: 
last method called on mock cannot throw com.package.exception.RequestNotFoundException

1 个答案:

答案 0 :(得分:0)

如果您是单元测试,那么您只测试servlet类 异常必须来自requestService.query(query, parameters);而不是来自servlet。它只能在servlet中捕获。因此,你的期望是不正确的。

用不同的词语: 您的servlet不会抛出该异常,只捕获它并设置适当的状态代码。您应该测试是否已设置状态代码。你应该模拟query(...)方法来抛出异常。

相关问题