I need to mock following method call carBookBuilder.setTrip(protoConverter.convertTrip(carBookRequest, location))
, But When carBookBuilder.setTrip(protoConverter.convertTrip(carBookRequest, location))
is calling i should just return mocking tripdetails and skip protoConverter.convertTrip(carBookRequest, location)
method call.
ProtoRequestAdapterTest.java
@RunWith(PowerMockRunner.class)
@PrepareForTest({ProtoRequestAdapter})
class ProtoRequestAdapterTest {
@Test
public void testPopulateCarBookTest() {
CarApiToProtoConverter carApiToProtoConverter;
carApiToProtoConverter = PowerMockito.mock(CarApiToProtoConverter.class);
PowerMockito.when(carApiToProtoConverter.convertTripDetails(carBookRequest, locale)).thenReturn(tripDetails);
}
}
ProtoRequestAdapter.java
class ProtoRequestAdapter {
private CarBookRequest populateCarBook(BookingRequest bookingRequest) {
CarBookRequest newCarBookReq = bookingRequest.getCarBookRequest();
CarBookRequest.Builder carBookBuilder = CarBookRequest.newBuilder();
ProtoConverter protoConverter =
new ProtoConverter(refData, location);
carBookBuilder.setTrip(protoConverter.convertTrip(carBookRequest, location));
return carBookBuilder;
}
}
I see several problems here. If I understand you correctly, you are trying to test ProtoRequestAdapter#populateCarBook
.
First of all you should make the method public or at least protected, as otherwise your unit test can not call it.
Next the method you are trying to mock is ProtoConverter#convertTrip
, which is not private, as otherwise your code would not compile. More problematic is that you are instantiating it directly in your code, which makes it impossible to replace it with a mock.
I would strongly suggest you to inject it into your class (or at least move the instantiation into a (protected) getProtoConverter()
-method, which you can overwrite in your test).
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments