Mockito testi geçersiz bir yöntem bir istisna atar


399

voidDönüş türü olan bir yöntem var . Ayrıca birkaç istisna atabilir, bu yüzden atılan istisnaları test etmek istiyorum. Tüm denemeler aynı nedenden dolayı başarısız oldu:

Stubber türündeki (T) bağımsız değişkenleri (void) için geçerli olmadığında kullanılan yöntem

Herhangi bir fikir nasıl belirli bir istisna atmak için yöntem alabilirim?

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));

Yanıtlar:


706

Parantezler kötü yerleştirilmiş. Kullanmalısın

doThrow(new Exception()).when(mockedObject).methodReturningVoid(...);
                                          ^

ve yok

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
                                                                   ^

Bu belgelerde açıklanmıştır


7
Bu mockito tutarsızlık I ettik anahtarı nedenlerinden biridir @edwardmlyte MoxieMocks
Muel

@clement her ikisi de kullanılabilir: docs.mockito.googlecode.com/hg/latest/org/mockito/… . Bir istisna oluşturmak onu atmaz.
JB Nizet

1
@JB Nizet Sizinle tamamen aynı fikirdeyim ancak doThrow (Exception.class) yerine doThrow (new Exception ()) yazarsam, testimi başlattığımda şu hatayla karşılaşıyorum; Beklenen istisna com.company.project.exception.ElementNotFoundException ancak org.mockito.exceptions.base.MockitoException var:
clement

2
Test edilen kod, test kodu ve kural dışı durumun tüm yığın izlemesiyle başka bir soru sorun.
JB Nizet

6
doThrow (new Exception ()). when (object) .voidMethod (any ());
Soumyajit Swain

14

Mockito'nun yeni BDD stilini kullanarak nasıl yapılacağını merak ettiyseniz:

willThrow(new Exception()).given(mockedObject).methodReturningVoid(...));

Ve ileride referans olması için istisna atması ve ardından hiçbir şey yapmaması gerekebilir:

willThrow(new Exception()).willNothing().given(mockedObject).methodReturningVoid(...));

1
Bunu buraya gönderdiğiniz için teşekkürler; yöntem bir değer döndürürse: given (mockedObject.methodReturningAnObject ()). willThrow (new Exception ()); yöntem bir şey döndürmezse: willThrow (new Exception ()). given (mockedObject) .methodReturningVoid (...)); Açıklama formu javadoc: "Boşluk boşlukları, (Object)} (veya BDDMockito.given) olduğunda {@link Mockito # 'dan farklı bir yaklaşım gerektirir çünkü derleyici parantez içindeki boşluk yöntemlerini
sevmez
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.