2011-11-22 21 views

cevap

35

thenReturn yöntemi her zaman kendisine iletilenleri döndürecektir. new Servicemock() kodu, thenReturn numaralı çağrıya çağrılmadan önce yürütülmektedir. Oluşturulan ServiceMock daha sonra thenReturn'a aktarılıyor. Bu nedenle, thenReturn, bir oluşturma mekanizması olmayan ServiceMock mutlak bir örneğine sahiptir.

bir yeni bir örneğini temin etmek gerekirse

, Sen bu gerçekleşirse neden anlamak için farklı tablolar içine planı ayrı isteyebilirsiniz thenAnswer

when(mockedMergeContext.createNewEntityOfType(IService.class)) 
    .thenAnswer(new Answer<IService>() { 
    public IService answer(InvocationOnMock invocation) { 
     return new ServiceMock(); 
    } 
    }); 
+0

Günümü kurtardığım için çok teşekkürler :) –

10

kullanın.

Service svc = new ServiceMock(); 
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn(svc); 

Şimdi neden çalışmadığını görüyor musunuz? :)

Her zaman örnek bekletmeyi svc'ye döndürüyor, yöntem her çağrıldığında, new ServiceMock() yeniden değerlendirilmez. //docs.mockito.googlecode:

+1

Haklısınız! Teşekkürler! – myborobudur

3

Java 8'de Lambdas ile sadece

when(mockedMergeContext.createNewEntityOfType(IService.class)).thenAnswer(invocation -> new ServiceMock()); 

Dolayısıyla, sadece bir [geri arama] (http ile stubbing deneyin .thenAnswer(invocation -> new MyMock());