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

5
我们有一个从浏览器调用的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?基本上我们只是想要验证交互。

1
你需要注入一个 userHelper 的 Mock。你已经创建了测试用例了吗? - Fildor
是的,那样行不通。交互没有发生,因为它是一个lambda表达式。 - Vinoth Kumar C M
1
因此,您的测试应该触发交互,然后验证模拟。 - Nazarii Bardiuk
2个回答

2
进行“单元”测试时,您应该创建测试类并在测试类中创建该方法所属类的新实例。userHelper在lambda表达式中未定义,因此它是一个类成员?如果是这样,可以使用Mockito模拟:
  • 使用Mockito创建模拟userhelper对象
  • 模拟注入到测试类中。
  • 调用createUser方法。
  • 验证模拟以确保updateUser方法只调用一次。
  • 您还可以进一步验证传递的用户和outputStream对象,使用captors

0

只有当另一端(通常是浏览器)开始从中拉取数据时,才会调用StreamingOutput。您的测试用例需要接管并(如评论所建议的)与响应进行交互。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接