Mock static method with nested method calls using Mockito

Viewed 27

This is my Static Class

public class StaticClass {
   public static ClassA methodCall1(String s) {
       return new ClassA();
   }
}

This is my ClassA class

public class ClassA {
   public ArrayList<ArrayList<String>> methodCall2(String s1, String s2, String s3) {
       ArrayList<ArrayList<String>> aList = new ArrayList<ArrayList<String>>();
       return aList;
   }
}

Currently my Test method is

@Test
public void testMethod() {
    ArrayList<ArrayList<String>> lst = new ArrayList<ArrayList<String>>();
    ArrayList<ArrayList<String>> aList = Mockito.spy(lst);
    for(int i = 0;i<2;i++) {
       aList.add(new ArrayList<String>());
    }
    aList.get(0).add("A");
    aList.get(0).add("B");
    aList.get(1).add("C");
    aList.get(1).add("D");
    try(MockedStatic<StaticClass> mockedstatic = Mockito.mockStatic(StaticClass.class, Answers.RETURNS_DEEP_STUBS)) {
        mockedstatic.when(() -> StaticClass.methodCall1(Mockito.anyString()).methodCall2(Mockito.anyString(),Mockito.anyString(),Mockito.anyString())).thenReturn(aList);
        Assert.equals(aList, StaticClass.methodCall1("anyString").methodCall2("String1","String2","String3"));
    }
}

It is throwing AssertionError that size of both lists are different 2 and 0.

0 Answers
Related