Soru Void yöntemlerle EasyMock beklentileri


Bazı birim testleri yapmak için EasyMock kullanıyorum ve kullanımını anlamıyorum EasyMock.expectLastCall(). 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. EasyMock'un bu yöntem çağrısını beklemesi gerektiğini düşünürdüm ama yorum yapmayı denedim. expectLastCall() Çağırma ve hala çalışır. Çünkü ben geçtim EasyMock.anyObject()) Beklenen bir çağrı olarak kaydetmiş mi yoksa başka bir şey mi var?

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 için API dokümanı bunun hakkında expectLastCall():

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

18
2017-12-17 15:44


Menşei


Bu soru benim aradığım şey değildi, ama Yogendra'ın cevabı ve yorumları ile birleşince sorunumu anlamama yardımcı oldu. Buraya ilk geldiğiniz için teşekkürler. - DaShaun


Cevaplar:


Bu yöntem, size beklenti koluyla döner. IExpectationSetters; Bu, void yönteminizin çağrılıp yapılmadığını ve ilgili davranışları doğrulayabilmenizi (ispatlamanızı) sağlar.

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

IExpectationSetters'ın ayrıntılı API'si İşte.

Örneğinizde sadece tutamıyorsunuz ve onunla hiçbir şey yapmıyorsunuz. bu nedenle ifadeyi almanın veya kaldırmanın herhangi bir etkisi yoktur. Bazı getter yöntemlerini çağırdığınız veya bazı değişkenleri bildirdiğiniz ve kullanmadığınızla aynıdır.


23
2017-12-17 15:51



Ne yapmam gerekiyor (ya da ne yapıyorum) ki bu benim testimin yapılmasını bekliyor. methodThatReturnsVoid()? Sadece onu çağırmadan önce replay()? - Sotirios Delimanolis
@SotiriosDelimanolis Bahsettiğim gibi, kullan EasyMock.expectLastCall().atLeastOnce(); yönteminizin başarıyla en az bir kez çağrıldığını iddia etmek için. - Yogendra Singh
Anladım. Ama hayır eğer expectLastCall()Test hala geçer. Sahte nesne beklemediğinden beri başarısız olmaz mı? - Sotirios Delimanolis
@SotiriosDelimanolis Test, bu icra ifadesi yürütme ifadesi olarak geçecektir. Umarım farkı anlarsın. Kodunuzun belirli davranışlarını doğrulamak için yazdığınız test durumu. Bu, doğrulamak istediğiniz tüm şeylere bağlıdır ve iddiaları buna göre yerine koymanız gerekir. - Yogendra Singh
Ugh ... EasyMock iyi bir başlangıçtı, ancak Mockito veya JMockit bu çemberleri atlıyor. - Joseph Lust


Sadece ihtiyacın var EasyMock.expectLastCall(); "Bu yöntem çağrıldı" dışında bir şey daha doğrulamak gerektiğinde (beklenti ayarı ile aynı)

Yöntemin kaç kez çağrıldığını doğrulamak istediğinizi varsayalım:

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

Veya bir istisna atmak istediğini söyle

EasyMock.expectLastCall().andThrow()

Eğer umursamıyorsan o zaman EasyMock.expectLastCall(); gerekli değildir ve herhangi bir fark yaratmaz, ifadeniz "obj.methodThatReturnsVoid(EasyMock.<String>anyObject());" beklenti kurmak için yeterlidir.


2
2018-04-29 06:13





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
2017-08-16 20:45



Hayır verify ima edildi. Sorun açıklandı Yogendra'nın cevabı. Sahte beklentilerimi doğru yazmamıştım. - Sotirios Delimanolis