【问题标题】:Reading mocked ServletOutputStream from println从 println 读取模拟的 ServletOutputStream
【发布时间】:2023-03-15 03:54:01
【问题描述】:

我有一个 HttpServlet,我正在尝试为其编写测试并模拟了 ServletOutputStream:ServletOutputStream outputStream = mock(ServletOutputStream.class);。我需要在使用println 的servlet 中获取写入outputStream 的内容。即,在 servlet 中,我有如下代码:

ServletOutputStream out = response.getOutpuStream();
out.println("foo");

所以,我想测试“foo”。我试着说when(outputStream.println()).then...,但这不起作用,因为 println() 是一个 void 方法。我也调查了 HttpServletResponseWrappers,但一直无法在那里找到解决方案。想法?我正在使用 Mockito。

【问题讨论】:

  • 您使用的模拟 API 是什么?
  • 您要确保将“foo”写入流吗?那将是(在 Mockito 中): verify(outputStream).println(eq("foo"));

标签: java unit-testing junit mocking mockito


【解决方案1】:

如果您想查看“foo”是否传递给 println 方法,您可以这样做:

verify(outputStream).println(eq("foo"));

【讨论】:

  • 谢谢,这解决了我的问题。我想补充一点,这指定我只看到一次“foo”。 verify(outputStream, atLeastOnce()).println(eq("foo")); "foo" >= 1 次有效。
  • 注意这里不需要eq();你可以写verify(outputStream).println("foo");verify(outputStream, atLeastOnce()).println("foo");
  • verify 和 eq 来自什么包?
猜你喜欢
  • 1970-01-01
  • 2012-03-28
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 2015-02-27
  • 2010-10-14
  • 1970-01-01
相关资源
最近更新 更多