2016-04-13 8 views
0

Java8 kullanıyorum ve atılan özel durumun geçerli bir tür olduğunu doğrulayacak bir test yardımcısı yazmaya çalışıyorum.Yöntem bağımsız değişkenler için geçerli değil İstisna türü silme sorunu var mı?

 assertThat(e, Matchers.isA(exceptionClass)); 

ama bu kötü kokan: Ben yapmak istiyorum ne

private static <E extends Exception> void expectThrow(Callable<Void> callable, Class<E> exceptionClass) { 
    try { 
     callable.call(); 
    } catch (Exception e) { 
     assertTrue(exceptionClass.isInstance(e)); 
    } 
} 

Ben hatalarından daha yararlı bilgi almak böylece hamcrest eşleştirici catch bloğunu değiştirin: İşte çalışan bir başlangıç ​​sürümü t derleme - Bu güzel hatayı alıyorum: The method assertThat(T, Matcher<? super T>) in the type Assert is not applicable for the arguments (Exception, Matcher<E>)

Bu bulmaca bana - Bu işe yaramaz mı?

Integer a = 3; 
    assertThat(a, Matchers.isA(Number.class)); 

biraz uğraşırken sonra aşağıdakiler de çalışır:

 assertThat((E)e, Matchers.isA(exceptionClass)); 

bu beni E'ye Exception kaynağından bir yardımcı "kontrolsüz döküm verir rağmen bu mükemmel çalışıyor şu durumda, benzer görünüyor "güvenlik uyarısı yazın. Biliyorum catch (E e) - tür silme ve tüm ...

Neler oluyor? Test yardımcımı güzel bir şekilde güvenli bir şekilde nasıl güncelleyebilirim?

cevap

0

Bu, 5 gün önce düzelen bir long-standing issue gibi görünüyor. isA imzası kırıldı. Hamcrest'in bir sonraki sürümü düzeltmeyi mümkün kılana kadar ve projeniz bu sürümü kullanana kadar,

assertThat(e, is(instanceOf(exceptionClass))) 
+0

Daaaang'ı kullanmanız gerekecek. – Krease

İlgili konular