如何测试 resp.getOutputStream()



我有想要测试的servlet。我想测试一下Mockito的doGet。 在 srvlet 的主要代码信息中,转到 PrintWriter 的页面/json。 在我的测试中,我希望有文件,我将在其中保存我的测试信息。而且我无法测试PrintWriter(我不明白如何(

而不是测试中的 PrintWriter,我尝试使用

StringWriter sw = new StringWriter();
PrintWriter pw  =new PrintWriter(sw);
when(new PrintWriter(resp.getOutputStream())).thenReturn(pw);

这是我的 Servlet doGEt

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/json");
PrintWriter writer = new PrintWriter(resp.getOutputStream());
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(list);
writer.append(jsonString);
writer.flush();
}

这是我的测试,不起作用

@Test
public void whenShouldCheckJsonSrevlet() throws ServletException, IOException {
String fileWay = "D:\CODE_WORK\JAVA\java-a-to-z\lesson8Aplication\src\main\java\persistent\test.txt";
final JSONControllers servlet = new JSONControllers();
HttpServletRequest req = mock(HttpServletRequest.class);
HttpServletResponse resp = mock(HttpServletResponse.class);
PrintWriter writer = new PrintWriter(new FileWriter(fileWay));
BufferedReader reader = new BufferedReader(new FileReader(fileWay));
when(new PrintWriter(resp.getOutputStream())).thenReturn(writer);
when(req.getReader()).thenReturn(reader);
servlet.doGet(req,resp);
servlet.doPost(req,resp);
}
java.lang.NullPointerException
at java.io.Writer.<init>(Writer.java:88)
at java.io.OutputStreamWriter.<init>(OutputStreamWriter.java:109)
at java.io.PrintWriter.<init>(PrintWriter.java:148)
at java.io.PrintWriter.<init>(PrintWriter.java:131)
at servlets.JSONControllersTest.whenShouldCheckJsonSrevlet(JSONControllersTest.java:62)

对象"列表"是什么,你正在传入映射器的writeValueAsString?JSONControllersTest.java的62是哪一行?

private ConcurrentHashMap<UUID, User> list = new ConcurrentHashMap<UUID, User>();
public JSONControllers() {
DbLocationStore db = DbLocationStore.getInstance();
for (int i = 0; i < db.size(); i++) {
list.put(generateID(),db.findById(String.valueOf(i)));
}
}

它是如何工作的。我有数据库。并从数据中形成列表并将其转换为JSON。 今天我像这样解决我的问题:

以前

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/json");
PrintWriter writer = new PrintWriter(resp.getOutputStream());
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(list);
writer.append(jsonString);
writer.flush();
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/json");
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(list);
resp.getWriter().write(jsonString);
resp.getWriter().flush();
}

但我仍然很有趣如何使用这个组织测试 PrintWriter writer = new PrintWriter(resp.getOutputStream(((;

目前我的测试似乎是这样的:

@Test
public void whenShouldCheckJsonSrevlet() throws ServletException, IOException {
String fileWay = "D:\CODE_WORK\JAVA\java-a-to-z\lesson8Aplication\src\main\java\persistent\test.txt";
final JSONControllers servlet = new JSONControllers();
HttpServletRequest req = mock(HttpServletRequest.class);
HttpServletResponse resp = mock(HttpServletResponse.class);
PrintWriter writer = new PrintWriter(new FileWriter(fileWay));
BufferedReader reader = new BufferedReader(new FileReader(fileWay));
when(resp.getWriter()).thenReturn(writer);
when(req.getReader()).thenReturn(reader);
servlet.doGet(req,resp);
servlet.doPost(req,resp);
}

最新更新