我想测试我的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
答案 0 :(得分:0)
如果您是单元测试,那么您只测试servlet类
异常必须来自requestService.query(query, parameters);
而不是来自servlet。它只能在servlet中捕获。因此,你的期望是不正确的。
用不同的词语:
您的servlet不会抛出该异常,只捕获它并设置适当的状态代码。您应该测试是否已设置状态代码。你应该模拟query(...)
方法来抛出异常。