2015-04-16 8 views

cevap

27

Neredeyse kendi sorunuzu cevapladınız. Yakalama bloğunuz, (ya da daha spesifik olarak java.lang.Error) olduğu için başarısız olursa, AssertionError yakalanmayacaktır. Bununla ilgili daha fazla bilgi için See the docs. Kişisel catch bloğu sadece Gerçekten yakalamak istiyorsan java.lang.Exception

uzatmak Throwable nesneleri yakalar - Eğer othersmentioned sahip olarak, bu çok sıradışı bir yoldur,

catch (AssertionError e) { 
... 

Ancak kullanmak gerekir iddiaları kullanmak için - genellikle geçmek gerekir ve eğer onlar başarısız olursa program yürütme devam etmek istediğiniz için çok sıradışı. Bu yüzden başarısızlık, Exception yerine Error atar. this question'da Error'u yakalama hakkında daha fazla bilgi edinebilirsiniz.

Sadece test istemediğinizden emin misiniz - if (variableName == "1")? Birim-test yardımcı kodunu test ediyorsanız, bir eşleyici gibi test ediyorsanız, AssertionError'u yakalamak mantıklı olabilir.

+0

Bir birim-test yardımcı sınıfının doğru şeyi yapıp yapmadığını görmek istendiğinde (ünite testi ile ;-)), böyle bir AssertionError'u yakalayabileceğini umarız. Bunu yakalamak için geçerli bir durum olurdu, değil mi? – gkephorus

+0

@gkephorus evet, sanırım olabilirdi. Bunu "N.B." olarak düzenlemekte özgürsünüz. Eğer isterseniz ve bunu onaylayacağım :) –

+0

@JRichardSnape - Ben sadece javascript ve getters i.e. POJO ile dize değişkenleri olan iki java nesnesi (json nesnelerinden elde edilen) karşılaştırmak istiyorum. Sadece bir eşleşmeyi belirlemek için değişkenlerin bazılarını (hepsi değil) karşılaştırmak istiyorum. Değişkenlerden biri için sadece kısmi değer karşılaştırılmalıdır.Tüm önerilerimi try catch (AssertionError) bloğuna koymak iyi bir fikir midir? Böylelikle, yakalama bölümünde yanlış olanı, hangi alanın uyumsuz olduğunu ve kullanışlı bir hata mesajı dizesiyle gösterebiliyorum. Bu şekilde, eğer birkaç tane yazmak zorunda kalmayacağım. Sesler iyi mi? – testerjoe2

2

Eh, testlerinizi yazmak için JUnit kullandığınızı düşünüyorum. Bu durumda, Assert.assertEquals() numaranızı yakalamamalısınız çünkü normal test yürütme için geçmeleri gerekir. Herhangi bir istisna atarsa, kodunuzun gerektiği gibi performans göstermediği anlamına gelir.

if (num == 1 || num == 2) { 
    throw new Exception(); 
} 

Kendi istisna sınıfı oluşturmak ve istediğiniz mesajda geçebileceği: Eğer bu şekilde hataları yakalamak istiyorsanız

+0

Ünite Testi için kullanılan “Assert” in hatalı bir kötüye kullanımı gibi görünüyor, evet benim savunduğum kod bir istisna atar. Ancak bu tür iddiaları veya diğer hataları Exception sınıfının tüm hatalarını yakalamak istiyorum. Nasıl yapabilirim ? – karan

+2

Yapamazsın. “AssertionError”, “catch” den “catch” öğesinden miras alır; Https://docs.oracle.com/javase/7/docs/api/java/lang/AssertionError.html sayfasına bakın. Eğer her neyse onları yakalamanız gerekiyorsa, SpaceCowboy'un cevabı. – Aakash

İlgili konular