2016-03-31 12 views
7

doThrow() ve thenThrow() arasındaki fark nedir?Mockito: doThrow() ve thenThrow() arasındaki fark

Diyelim ki, bir kullanıcının oturum açma bilgilerini doğrulamak için bir kimlik doğrulama hizmetiyle uğraşmak istiyoruz. Bir istisna alaysak, aşağıdaki iki satır arasındaki fark nedir?

doThrow(new BadCredentialsException("Wrong username/password!")).when(authenticationService).login("user1", "pass1"); 

when(authenticationService.login("user1", "pass1")).thenThrow(new BadCredentialsException("Wrong username/password!")); 

cevap

13

Neredeyse hiçbir şey vs: Basit vakalarda bunlar tam olarak aynı davranırlar. when sözdizimi İngilizce dilbilgisi kurallarına daha çok benzer.

Neden "neredeyse"? when stilinin aslında authenticationService.login numaralı aramayı içerdiğini unutmayın. Bu satırda değerlendirilen ilk ifade budur, bu nedenle, when numaralı çağrıya yapılan çağrı sırasında, hangi davranışa sahip olursanız olun. Çoğu zaman, burada sorun yok: Metod çağrısı, stubbed davranışa sahip değildir, bu nedenle Mockito sadece bir kukla değer döndürür ve iki çağrı tam olarak eşdeğerdir.

  • sen zaten stubbed tutumu aşırı ediyoruz özellikle Bir Yanıt çalıştırmak veya aralarına casus çalışıyoruz bir özel durum
  • atmak: Ancak, bu aşağıdakilerden biri doğruysa durum olmayabilir when().thenThrow() tehlikeli yöntemi çağırmak ve testinizi kapalı atacağım oysa bu gibi durumlarda önemsiz olmayan bir uygulamaya

ile doThrow, when(authenticationService) arayıp tüm tehlikeli davranışı devre dışı kalır.

(Tabii ki, boşluk yöntemleri için, ayrıca -the when sözdizimi bir dönüş değeri olmayan derlemek olmaz doThrow kullanmanız gerekir. Başka seçenek yok yok.)

Böylece doThrow daima biraz Bir kural olarak daha güvenli, ancak when().thenThrow() biraz daha okunabilir ve genellikle eşdeğerdir.

+0

"doThrow (...) için temel neden" (...) "değeri – BretC

+0

@ BretC değerini döndürmediği yöntemlerde olduğunu düşünmüştüm Evet, doVerb geçersiz yöntemlerle çalışmak için çalışıyor, ancak hiç bir şey yok o; 'ne zaman' sadece derleme yapmaz. Ben birçok ilgili soruları gördüğümden daha ince farklara odaklanırdım. Hepinize teşekkürler - bende düzenleyeceğim. –