Random
Random

Reputation: 979

Mockito.thenReturn(...) in not working

Test Class

public class CollectionImplementationUnitTest {

  CollectionImplementation colImp;

  public void setup() throws Exception {
    ...
    colImp = Mockito.spy(new CollectionImplementation());
    ...
  }

  private String mockHistoryFromStrgyTable() {
    String value1 = "myValue";
    return value1;
  }

  @Test 
  public void testgetinfo (){
    ...
    Mockito.when(
      colImp.historyFromStrgyTable(
         Mockito.anyString(),Mockito.anyString(),Mockito.anyString()
      )
    )
    .thenReturn(mockHistoryFromStrgyTable());

    CollectionsAccount Info = colImp.accountInfo(
      "string1","string2","string3", new IdentityAcc(), TableLst
    );

    //sometestmethods and asserts
  }
}

Class under Test

public class CollectionImplementation {
  ...
  @Override
  public CollectionsAccount accountInfo(("string1","string2","string3", new IdentityAcc(), TableLst)) {
      DetailsHelper helper = new (db2, "string",getmethod());
      return helper.accountInfo("string1","string2", new IdentityAcc(), TableLst); 
  }

  public String historyFromStrgyTable(){
    //contains a call to the data base
  }
}

DetailsHelper

public class DetailsHelper{
  public CollectionsAccount accountInfo((String string1,String string2,String string3, new IdentityAcc(), TableLst)){
  ...
  String paymentdetails = historyFromStrgyTable();  
  }
   public String historyFromStrgyTable(){
   //contains a call to the data base
   }
}

When I try to mock the data for the method HistoryFromStrgyTable() it is actually making a call to HistoryFromStrgyTable() instead of getting from mockHistoryFromStrgyTable().

My test cases are failing at this line

Mockito.when(col_Imp.HistoryFromStrgyTable(Mockito.anyString(),
  Mockito.anyString(),Mockito.anyString())).thenReturn(  mockHistoryFromStrgyTable());

Can anyone help me with this. I don't understand what's wrong. I also changed the method mockHistoryFromStrgyTable() from private to public since mockito cannot mock private methods.

Upvotes: 1

Views: 6024

Answers (1)

Dawood ibn Kareem
Dawood ibn Kareem

Reputation: 79838

This is happening because you're using a spy, not a mock. Running the "real" method when you call it is exactly what Mockito spies are supposed to do.

To stub your spy, this is the syntax that you want to use.

Mockito.doReturn(mockHistoryFromStrgyTable()).when(colImp).
    historyFromStrgyTable(Mockito.anyString(),Mockito.anyString(),Mockito.anyString());

You can find more detail on this in my post here.

Upvotes: 2

Related Questions