13 Haziran 2019 Perşembe

Mockito doReturn + when Kullanımı - Statik Sonuç Listesi Dönmek İçin (Eğer Gerçek Kod Exception Fırlatıyorsa)

Giriş
Normalde when + thenReturn Kullanımı ile aynı şeydir, ancak arada bazı ufak farklılıklar var Açıklaması şöyle. En önemli fark doReturn() çağrısının yan etkisini olmaması (no side effect).
You can use doThrow(), doAnswer(), doNothing(), doReturn() and doCallRealMethod() in place of the corresponding call with when(), for any method. It is necessary when you
  • stub void methods
  • stub methods on spy objects (see below)
  • stub the same method more than once, to change the behaviour of a mock in the middle of a test.
1. void dönen metod ile kullanımı
Örnek ver

2. Spy Nesne İle Kullanım
Açıklaması şöyle.
doReturn().when() avoids calling the real method in spies and already-stubbed objects
Spy olarak kullanılan nesne (yani gerçek kod) exception fırlatıyorsa bu metodu kullanmak gerekir, çünkü doReturn() çağrısının yan etkisi (side effect) yoktur.

Örnek
Elimizde şöyle bir kod olsun.
public class MyClass {
  protected String methodToBeTested() {
    return anotherMethodInClass();
  

  protected String anotherMethodInClass() {
    throw new NullPointerException();
  }
}
Şöyle yaparız.
@Spy
private MyClass myClass;

// ...

// would work fine
doReturn("test").when(myClass).anotherMethodInClass();

// would throw a NullPointerException
when(myClass.anotherMethodInClass()).thenReturn("test");
Örnek
Elimizde şöyle bir kod olsun. Bu kod exception fırlatır.
List list = new LinkedList();
List spy = spy(list);
// Will throw java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
when(spy.get(0)).thenReturn("java");
assertEquals("java", spy.get(0));
Şöyle yaparız.
List list = new LinkedList();
List spy = spy(list);
doAnswer(invocation -> "java").when(spy).get(0);
assertEquals("java", spy.get(0));

Hiç yorum yok:

Yorum Gönder