我在servlet的doPost()中拥有这个:
if(request.getParameter("mode").equals("html"))
request.getRequestDispatcher("WEB-INF/jsp/Menu.jsp").forward(request, response);
else {
request.getRequestDispatcher("WEB-INF/jsp/success.jsp").forward(request, response);
}
我通过具有如下形式的HTML页面来测试第一条语句的执行:
<form action="" method="post">
Username:<br>
<input type="text" name="user"><br>
Password:<br>
<input type="text" name="pass"><br><br>
<input type="hidden" name="mode" value="html" />
<input type="submit" value="Submit">
</form>
提交表单时,第一个语句(转发到Menu.jsp)正确执行。 我通过进行单元测试(不是我自己写的)来测试第二条语句的执行,该单元测试直接而不是通过表单来发出发布请求,如下所示:
@Test
public void testLoginSuccess() {
try {
WebClient webClient = new WebClient();
String jsonText = login(webClient, "bob3", "fred3");
DocumentContext dc = JsonPath.parse(jsonText);
Assert.assertEquals("success", dc.read("$['status']"));
} catch (IOException e) {
e.printStackTrace();
Assert.assertTrue(false);
}
}
登录方法:
private String login(WebClient webClient, String username, String password)
throws MalformedURLException, IOException {
WebRequest requestSettings = new WebRequest(new URL(URL_BASE+"Login"), HttpMethod.POST);
requestSettings.setRequestParameters(new ArrayList());
requestSettings.getRequestParameters().add(new NameValuePair("user", username));
requestSettings.getRequestParameters().add(new NameValuePair("pass", password));
Page page = webClient.getPage(requestSettings);
String jsonText = page.getWebResponse().getContentAsString();
testLogger.log(Level.INFO, jsonText);
return jsonText;
}
测试失败,并在登录方法中的这一行给了我FailingHttpStatusCodeException:
Page page = webClient.getPage(requestSettings);
由于我不是自己编写测试并且也不完全理解测试代码,所以我无法说出测试为什么失败,但是当我的servlet中没有if-else时,它就过去了,总是执行else语句。
谢谢您的帮助。
答案 0 :(得分:0)
我不好,我在做
request.getParameter("mode").equals("html")
如果未设置参数,则“ request.getParameter(“ mode”)“可能返回null,然后对null结果调用.equals。
为什么它在堆栈跟踪中没有给我NullPointerException?