我们如何对这个lambda表达式进行单元测试



我们有一个从浏览器调用的REST端点(JAX-RS)。我们正在传递OutputStream,这样我们就可以让浏览器显示调用的结果。

这是方法。

@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

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

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

  • 使用Mockito创建一个mock userhelper对象
  • 将mock注入到测试类中
  • 调用createUser方法
  • 在mock上验证以断言updateUser方法被调用一次
  • 您可以更进一步,验证使用捕获器传递了哪些用户和outputStream对象

StreamingOutput只有当另一端的人(通常是浏览器)开始从中提取时才会被调用。您的测试用例需要接管并(如注释所示)开始与响应交互。

相关内容

  • 没有找到相关文章

最新更新