Reputation: 13
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;
}
}
Upvotes: 1
Views: 238
Reputation: 1861
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).
Upvotes: 1
Reputation: 1814
You have to instantiate tripDetails
in your test class.
TripDetails tripDetails = new TripDetails();
tripDetails.setLocation = "London";
Upvotes: 0