Search code examples
javaunit-testingmockingjmockit

JMockit NullPointerException on mocked object in Expectations


Here is the relevant part of my test case:

@NonStrict
private StowServiceWrapper mockStowServiceWrapper;

@NonStrict
private IsItemStowableResponse mockIsItemStowableResponse;

@NonStrict
private IsItemStowable mockIsItemStowable;

...

@Test
public void testMoveItemActivitySuccess() {
    final MoveItemActivity activity = new MoveItemActivity();        

    final MoveItemRequest request = new MoveItemRequest();

    new Expectations() {

        {
            invoke(activity, "isItemStowable", request); result=mockIsItemStowable;
            //activity.isItemStowable(request); result=mockIsItemStowable;
            mockStowServiceWrapper.isItemStowableToBin(anyString, anyString, anyString, anyString); result=mockIsItemStowableResponse;
            mockIsItemStowableResponse.hasFilterResults();result=false;
        }
    };

    MoveItemResponse response = activity.enact(request);

Here is the relevant part of the class source (in MoveItemActivity):

StowServiceWrapper stowServiceWrapper = new StowServiceWrapperImpl();
private IsItemStowable isItemStowable(MoveItemRequest input) {

    IsItemStowable isStowable = new IsItemStowable();
    isStowable.setIsItemStowable(false);

    System.out.println("TEST1");
    /* First check if item is stowable to bin */
    IsItemStowableToBinResponse isItemStowableResponse = stowServiceWrapper.isItemStowableToBin();
    System.out.println("TEST2");
    /* fastFail is 'true' by default, so stow service request will only return one filter violation at a time */
    if (isItemStowableResponse.hasFilterResults()) {
        ...
    }

I'm getting a NullPointerException at this line: if (isItemStowableResponse.hasFilterResults())

I'm relatively new to JMockit. I'm not sure why it's executing the code inside this method - I just want to mock the whole method since it's a dependency in my 'enact' method which I'm trying to unit test.


Solution

  •     new MockUp<MoveItemActivity>()
        {
            @Mock
            IsItemStowable isItemStowable(MoveItemRequest request) {
                return new IsItemStowable();
            }
        };
    

    Ok figured out how to mock a method in the class under test.