10 Mart 2019 Pazar

Mockito when + thenReturn Kullanımı - Statik Sonuç Listesi Dönmek İçin

Giriş
Kullanım şekli şöyle
 Mockito.when(mock.method(args)).thenReturn(value)
when metodu
when() metodu thenReturn() ile kullanılır. Şu metod bu parametre ile çağrılınca bu sonucu dön anlamına gelir.

-Eğer belirtilen parametre dışında bir girdi ile çağırırsak null döner. Açıklaması şöyle.
If you invoke a Mock with parameters that you haven’t told it to expect then it will just return null
-Eğer parametrenin ne olduğu ile ilgilenmiyorsak any(), anyLong(), anyString(), anyInt(), anyFloat(), anyDouble(), anyByte(), anyListOf(), anyMapOf(), anySetOf() gibi bir ArgumentMatcher kullanabiliriz.


Örnek
Şöyle yaparız.
B b = Mockito.mock(B.class)
Mockito.when(b.execute()).thenReturn("String")
Örnek
Elimizde şöyle bir kod olsun
public class MyClass {
  
  protected String anotherMethodInClass() {
    ...
  }
}
Şöyle yaaprız
// would throw a NullPointerException
when(myClass.anotherMethodInClass()).thenReturn("test");
Örnek 
Elimizde şöyle bir sınıf olsun
public class KeyService {

  public String getKey() {
    return "fakeKey";
  }
}
Bu sınıfı mock'layalım
KeyService keyServiceMock() {
  return Mockito.mock(KeyService.class);
}
Şöyle yaparız.
KeyService keyService = keyServiceMock ()

Mockito.when(keyService.getKey()).thenReturn("key1", "key2");
thenReturn metodu
- thenReturn() metodları zincir gibi bağlanabilir. Şu metod bu parametre ile çağırınlınca önce ilk thenReturn(), sonra ikinci thenReturn() sonucu dönülür. Eğer daha fazla çağırırsak en son thenReturn() dönülür. Açıklaması şöyle
Here you can return different values for more than one call just adding them as more parameters: thenReturn(value1, value2, value-n, …).
- Eğer daha önce when() + thenReturn() ile dönecek nesneyi tanımladıysak anca bir başka yerde dönecek nesneyi değiştirmek istiyorsak when() metodunu aynı key değeri ile çağırıp thenReturn() metoduna yeni parametreyi veririz. Bu aynı bir map'in içindeki key değerini farklı bir value ile değiştirmek gibidir.

Örnek
Şöyle yaparız.
@Test
public void ViewUserData(){

  FindIterable iterable = mock(FindIterable.class);
  MongoCursor cursor = mock(MongoCursor.class);
  Document doc1=new Document("1","bharathi");
  Document doc2=new Document("2","madhavi");
  when(iterable.iterator()).thenReturn(cursor);
  when(cursor.hasNext()) 
      .thenReturn(true)
      .thenReturn(true)
     .thenReturn(false); 
  when(cursor.next())
      .thenReturn(doc1)
      .thenReturn(doc2); 
  Mockito.when(collection.find(Mockito.any(BasicDBObject.class))).thenReturn(iterable);
  mdmdaoimpl.viewUserData("1","bharathi");
  verify(collection,times(1)).find(Mockito.any(BasicDBObject.class));
}


Hiç yorum yok:

Yorum Gönder