Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do we unit test this lambda expression?

We have a REST end point (JAX-RS) that is invoked from the browser. We are passing around OutputStream so that we could have the browser display the result of the call.

Here is the method.

@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();
}

Using Junit and Mockito, how do we verify if userHelper.findUser and userHelper.updateUser has been called ?

Basically we just want to verify the interactions.

like image 595
Vinoth Kumar C M Avatar asked Oct 29 '22 23:10

Vinoth Kumar C M


1 Answers

To "unit" test this you should create your test class and create a new instance of the class this method belongs to in the test class. The userHelper is not defined in the lambda so it is a class member? If so it can be mocked:

  • Create a mock userhelper object with Mockito
  • inject the mock to your test class.
  • Call the createUser method.
  • verify on the mock to assert the updateUser method is called once.
  • You can go a step further and verify what user and outputStream objects are passed using captors.
like image 170
UserF40 Avatar answered Nov 09 '22 09:11

UserF40