我们有一个从浏览器调用的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.findUser
和userHelper.updateUser
?
基本上,我们只是想验证交互。
要进行"单元"测试,您应该创建测试类,并在测试类中创建该方法所属类的新实例。userHelper没有在lambda中定义,所以它是类成员?如果是这样,它可以被嘲笑:
- 使用Mockito创建一个mock userhelper对象
- 将mock注入到测试类中
- 调用createUser方法
- 在mock上验证以断言updateUser方法被调用一次
- 您可以更进一步,验证使用捕获器传递了哪些用户和outputStream对象
StreamingOutput只有当另一端的人(通常是浏览器)开始从中提取时才会被调用。您的测试用例需要接管并(如注释所示)开始与响应交互。