minu roy
minu roy

Reputation: 13

Mocking a private method in junit using Powermockito

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

Answers (2)

Seb
Seb

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

Wavemaster
Wavemaster

Reputation: 1814

You have to instantiate tripDetails in your test class.

TripDetails tripDetails = new TripDetails();
tripDetails.setLocation = "London";

Upvotes: 0

Related Questions