Home > OS >  Mock in java exception
Mock in java exception

Time:10-07

I have this catch statement:

catch (NotFoundException ex) {
      ex.getError().setTitle(NOT_FOUND);
      throw new NotFoundException(resource, id, ex.getError());
}

How an I mock this exception? I've tried this

    when(service
        .filter(eq(any()), eq(any()), eq(any())))
        .thenThrow(new NotFoundException(anyString(), anyString()));`

But it gives me a null exception error because of this line:

ex.getError().setTitle(NOT_FOUND);

The constructor is:

  public NotFoundException(String resource, String id, Error error) {
    this.resource = resource;
    this.ids = Collections.singletonList(id);
    this.error = error;
  }

And I can't get the exception variable to set the title, or find an way to mock it.

Thanks for you help!

CodePudding user response:

.thenThrow(new NotFoundException(anyString(), anyString()));

This isn't allowed: anyString() only stands directly in for the call in when and verify. In your call to filter, simply use any() rather than eq(any()), but you're otherwise using matchers in the correct place.

Furthermore, it looks like your system-under-test assumes that ex.getError() is non-null; it is likely that you'll need to pass in a useful Error instance as constructor parameter into the NotFoundException you create.

.thenThrow(new NotFoundException("foo", "bar", new Error(/* ... */)))

Naturally, if your Error is difficult to create or work with, you might use a mock(Error.class) instead.

  • Related