2016-07-28 84 views
5

我们有一个从浏览器调用的REST终点(JAX-RS)。我们正在传递OutputStream,以便我们可以让浏览器显示调用的结果。我们如何单元测试这个lambda表达式?

这里是方法。

@Path("/mypath/{userId}") 
@POST 
public Response createUser(@PathParam("userId") final int userId) { 
    StreamingOutput stream = (outputStream) -> { 
     User user = userHelper.findUser(userId); 
     userHelper.updateUser(user,outputStream); 
    }; 

    return Response.ok(stream).build(); 
} 

使用JUnit和的Mockito,我们如何验证是否userHelper.findUseruserHelper.updateUser被称为

基本上我们只是想验证交互。

+1

你必须注入一个模拟的userHelper。你是否已经创建了一个TestCase? – Fildor

+0

是的。这是行不通的。交互不会发生,因为它是一个lambda表达式。 – vinoth

+1

所以你的测试应该触发交​​互,然后验证一个模拟 –

回答

0

StreamingOutput仅在另一端(通常是浏览器)的某个人开始从中拉出时才被调用。您的测试案例需要接管并且(如评论所建议的那样)开始与响应进行交互。

2

要“单元”测试,您应该创建您的测试类并创建此方法属于测试类的类的新实例。 userHelper没有在lambda中定义,所以它是一个类成员?如果是这样,可以嘲笑:

  • 创建的Mockito
  • inject模拟一个mock userhelper对象到您的测试类。
  • 调用createUser方法。
  • verify上模拟来断言updateUser方法被调用一次。
  • 您可以更进一步,使用captors验证用户和outputStream对象是否通过。