我正在尝试用camel编写junit for file。
下面是我想模仿的servletResponse。
处理器:
HttpServletResponse servletResponse = exchange.getIn().getBody(HttpServletResponse.class);
ServletOutputStream servletOutputStream = servletResponse.getOutputStream();
IOUtils.copy(inputStream, servletOutputStream);
servletOutputStream.flush();
servletOutputStream.close();
我已经尝试为此编写junit。
下面是模拟servletResponse的代码:
HttpServletResponse response = mock(HttpServletResponse.class);
ServletOutputStream outputStream = mock(ServletOutputStream.class);
when(response.getOutputStream()).thenReturn(outputStream);
但是我得到了处理器中的servletResponse的null。
3条答案
按热度按时间ftf50wuq1#
你应该为
exchange.getIn()
和message.getBody(HttpServletResponse.class)
添加when(...)
。我建议你使用@RunWith(MockitoJUnitRunner.class)
和@Mock
注解。看看下面的测试:更新,这里是我的服务:
测试输出:
0tdrvxhp2#
最好的解决方案是不使用
exchange.getIn().getBody
,因此没有义务模仿它。Processor interface使用起来有点笨拙,而且很难测试。因此,您可以使用简单的bean,它们易于使用和测试。
您可以编写一个Java bean来免费注入消息正文,而不是编写一个调用
exchange.getIn().getBody
的处理器。请参阅Camel Docs for more Annotations to inject message parts into Beans。POJO中的此方法与您的处理器执行相同的操作。
您可以使用以下命令调用路线中的POJO
由于Inversion of control,测试这个bean非常容易。你不需要得到你的ServletResponse,它已经给你了。
jecbmhm33#
在游戏后期,但我也面临着类似的问题。下面的一些东西解决了我的问题。