2012-12-17 19 views
17

Bazı birim testleri yapmak için EasyMock kullanıyorum ve EasyMock.expectLastCall() kullanımını anlamıyorum. Aşağıdaki kodumda gördüğünüz gibi, başka bir nesnenin yönteminde çağrılmayı geçersiz kılan bir yöntemle bir nesneyim var. Ben, EasyMock'un bu yöntem çağrısını beklemesi gerektiğini düşünürdüm ama expectLastCall() çağrısını yorumlamaya çalıştım ve hala çalışıyor. EasyMock.anyObject())'u geçerek beklenen bir çağrı olarak kaydettiğimden mi yoksa başka bir şey mi var?VoIP yöntemleri ile EasyMock beklentileri

MyObject obj = EasyMock.createMock(MyObject.class); 
MySomething something = EasyMock.createMock(MySomething.class); 
EasyMock.expect(obj.methodThatReturnsSomething()).andReturn(something); 

obj.methodThatReturnsVoid(EasyMock.<String>anyObject()); 

// whether I comment this out or not, it works 
EasyMock.expectLastCall(); 

EasyMock.replay(obj); 

// This method calls the obj.methodThatReturnsVoid() 
someOtherObject.method(obj); 

EasyMock API doc diyor bu konuda expectLastCall():

Returns the expectation setter for the last expected invocation in the current thread. This method is used for expected invocations on void methods. 
+0

Bu soru aradığım ama cevap birleştirilip Yogendra yorumlarına benim sorunu anlamak yardım etmedi şeydi. Buraya ilk geldiğiniz için teşekkürler. – DaShaun

cevap

23

Bu yöntem IExpectationSetters aracılığıyla size beklenti tanıtıcısı döndürür; Bu, void yönteminizin çağrılıp yapılmadığını ve ilgili davranışları doğrulayabilmenizi (ispatlamanızı) sağlar. IExpectationSetters arasında

EasyMock.expectLastCall().once(); 
EasyMock.expectLastCall().atLeastOnce(); 
EasyMock.expectLastCall().anyTimes(); 

Detaylı API here olup.

Örneğinizde yalnızca tanıtıcıya geçiyorsunuz ve bununla hiçbir şey yapmıyorsunuz demektir bu nedenle ifadeyi kaldırmanın veya kaldırmanın herhangi bir etkisini görmüyorsunuz. Bazı getter yöntemlerini çağırdığınız veya bazı değişkenleri bildirdiğiniz ve kullanmayınca aynıdır. Eğer daha fazla başka bir şey doğrulamaları gerektiğinde

+0

Ne yapmam gerekiyor (ya da ne yapıyorum), bu da benim testimin metodThatReturnsVoid() 'ın çağrılmasını beklediğini gösteriyor mu? Sadece replay() 'den önce mi çağırıyorsun? –

+0

@SotiriosDelimanolis Bahsettiğim gibi, yönteminizin en az bir kez başarıyla çağrıldığını iddia etmek için 'EasyMock.expectLastCall(). AtLeastOnce();' kullanın. –

+0

Anladım. Ama eğer 'expectLastCall() 'i yoksa, test hala geçer. Sahte nesne beklemediğinden beri başarısız olmaz mı? –

2

Sadece EasyMock.expectLastCall(); gerek "yöntemi denilen o. (aynı beklentisini oluşturmak gibi)"

Eğer yöntem olacak sözde kaç kez doğrulamak istediğini farz edelim herhangi ekleyin:

EasyMock.expectLastCall().once(); 
EasyMock.expectLastCall().atLeastOnce(); 
EasyMock.expectLastCall().anyTimes(); 

Ya da daha sonra EasyMock.expectLastCall(); edilir umursamıyorsan bir istisna

EasyMock.expectLastCall().andThrow() 

atmak istediğini söylüyorsun gerekli değildir ve herhangi bir fark yaratmaz, beyanınızı ayarlamak için "obj.methodThatReturnsVoid(EasyMock.<String>anyObject());" ifadeniz yeterlidir.

0

Sen EasyMock.verify (..) eksik

MyObject obj = EasyMock.createMock(MyObject.class); 
MySomething something = EasyMock.createMock(MySomething.class); 
EasyMock.expect(obj.methodThatReturnsSomething()).andReturn(something); 

obj.methodThatReturnsVoid(EasyMock.<String>anyObject()); 

// whether I comment this out or not, it works 
EasyMock.expectLastCall(); 

EasyMock.replay(obj); 

// This method calls the obj.methodThatReturnsVoid() 
someOtherObject.method(obj); 

// verify that your method was called 
EasyMock.verify(obj); 
+0

Hayır, 'doğrula' ima edildi.Sorun [Yogendra'nın cevabı] 'nda açıklanmıştır (http://stackoverflow.com/a/13917432/438154). Sahte beklentilerimi doğru yazmamıştım. –