mohit
mohit

Reputation: 6074

Not able to mock method which expects interface object

I'm using Mockito with Junit version : 4.8.2
I'm not able to mock methods which expects any interface objects.

For example,

public interface If extends Xyz {
}

Class Abc {
    protected List <String> getIPAddress(If x, String n) {
    }
}

This is sample test method:

@Test
public void testGetIPAddress() {
    Abc mockAbc = mock(Abc.class, CALLS_REAL_METHODS);
    when(mockAbc.getIPAddress(any(Xyz.class), anyString())).thenReturn(new List <String>());
}

When I run the above method, I get: NullPointerException

UPDATES

Actually I found out that the problem is using "CALLS_REAL_METHODS", when instantiating mocked object. Even if I use

when(mockAbc.getIPAddress(any(If.class), anyString())).thenReturn(null);

It is throwing NPE. The reason might be it's still calling the real method. How do I override calling the real method in this case?

Upvotes: 0

Views: 353

Answers (1)

Xavier Delamotte
Xavier Delamotte

Reputation: 3599

you need to call getIpAdress with an If not an Xyz

Also, new List <String>() won't work, as List is an interface, use new ArrayList<String>() instead:

@Test
public void testGetIPAddress() {
    Abc mockAbc = mock(Abc.class, CALLS_REAL_METHODS);
    when(mockAbc.getIPAddress(any(If.class), anyString())).thenReturn(new ArrayList<String>());
}

Upvotes: 1

Related Questions