2016-04-14 32 views
40

Daha sonraki birim testleri için Mockito kullanıyorum. doAnswer vs thenReturn'u ne zaman kullanmam gerektiği konusunda kafam karıştı.Mockito: doAnswer Vs thenReturn

Herkes bana ayrıntılı olarak yardımcı olabilir mi? Şimdiye kadar, ben thenReturn ile denedim.

cevap

62

Metod çağrısı yaptığınız anda dönüş değerini biliyorsanız, thenReturn veya doReturn kullanmalısınız. Bu tanımlı değer, alay yöntemini çağırdığınızda döndürülür.

thenReturn(T value) Yöntem çağrıldığında döndürülen bir dönüş değeri belirler.

@Test 
public void test_return() throws Exception { 
    Dummy dummy = mock(Dummy.class); 
    int returnValue = 5; 

    // choose your preferred way 
    when(dummy.stringLength("dummy")).thenReturn(returnValue); 
    doReturn(returnValue).when(dummy).stringLength("dummy"); 
} 

Answer

bir alay yöntem çağrıldığında Eğer örneğin ek eylemleri yapmak gerektiğinde kullanılır Bu yöntem çağrısı parametrelerine dayanarak dönüş değerini hesaplamanız gerektiğinde. Eğer jenerik Answer bir boşluk yöntemi saplama istiyorum

kullanın doAnswer().

Yanıt, gerçekleştirilen bir eylemi ve alayla etkileşime girdiğinizde döndürülen bir dönüş değerini belirtir.

@Test 
public void test_answer() throws Exception { 
    Dummy dummy = mock(Dummy.class); 
    Answer<Integer> answer = new Answer<Integer>() { 
     public Integer answer(InvocationOnMock invocation) throws Throwable { 
      String string = invocation.getArgumentAt(0, String.class); 
      return string.length() * 2; 
     } 
    }; 

    // choose your preferred way 
    when(dummy.stringLength("dummy")).thenAnswer(answer); 
    doAnswer(answer).when(dummy).stringLength("dummy"); 
} 
+0

teşekkürler @schlauergerd. Şimdi anladım. –

+0

Merhaba @Roland Weisleder, ancak bazen bir miktar üretilen iç kodu döndürmeli ve argümanlarla ilgisi yoktur. 'code = UUID.randomUUID()', bunu 'mockito' ile uygulamak imkansız buldum. – zhuguowei

+0

Sahibiniz her bir çağrışım için yeni bir UUID döndürdüğünde, UUID.randomUUID(); –