JUnit ErrorCollector @Rule Örnekle
⚡ Akıllı Özet
JUnit ErrorCollector, bir testin başarısız olduktan sonra çalışmaya devam etmesini sağlayan, tüm hata nesnelerini toplayıp test yöntemi bittiğinde durdurmak yerine birlikte raporlayan bir kuraldır.ping İlk problemde.
Normal bir senaryoda, testin yürütülmesi sırasında herhangi bir hata tespit ettiğinizde testi durdurur, hatayı düzeltir ve testi yeniden çalıştırırsınız.
Fakat JUnit Biraz farklı bir yaklaşımı var. Bununla birlikte JUnit Hata toplayıcı sayesinde, bir sorun tespit edildikten veya test başarısız olduktan sonra bile test yürütmesine devam edebilirsiniz. Hata toplayıcı tüm hata nesnelerini toplar ve bunları yalnızca test yürütmesi bittikten sonra bir kez raporlar.
Hata Toplayıcı'yı neden kullanmalısınız?
Bir test betiği yazarken, ağ hatası, doğrulama hatası veya başka herhangi bir nedenle kodun herhangi bir satırı başarısız olsa bile tüm testlerin çalışmasını istersiniz. Bu durumda, sağlanan özel bir özellik sayesinde test betiğini çalıştırmaya devam edebilirsiniz. JUnit "hata toplayıcı" olarak bilinir.
Bunun için, JUnit kullanır @Kural ek açıklamasıBu yöntem, hata toplayıcı nesnesi oluşturmak için kullanılır. Hata toplayıcı nesnesi oluşturulduktan sonra, bu yöntemi kullanarak tüm hataları nesneye kolayca ekleyebilirsiniz. addError (Atılabilir hata). Bildiğin gibi, Atılabilir süper sınıftır Istisna hem de Hata sınıflar JavaBu şekilde hata eklediğinizde, bu hatalar günlüğe kaydedilecektir. JUnit test sonucu.
Tüm hataları bir Hata Toplayıcıya eklemenin avantajı, tüm hataları aynı anda doğrulayabilmenizdir. Ayrıca, komut dosyası ortasında başarısız olsa bile, yürütme test yönteminin sonuna kadar devam eder.
notBasit bir assert veya try/catch bloğu kullanılması durumunda, hata toplayıcı yönteminin kullanılması mümkün olmayacaktır.
Basit kod
Hata Toplayıcı hakkında daha fazla bilgi edinmek için, aşağıda yer alan ve bir Hata Toplayıcı nesnesi oluşturmayı ve tüm hataları bu nesneye eklemeyi gösteren kod örneğine bakın. tracKonu şu:
package guru99.junit; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); collector.checkThat(getResults(), not(containsString("here is an error"))); // all lines of code will execute and at the end a combined failure will be logged in. } }
Not: Bu, açıklayıcı bir örnektir.tracBu, derlenebilir bir dosya değil. Sondaki yorum satırı, başında // işareti olmadan ikinci bir satıra geçiyor ve getResults() fonksiyonu ile Hamcrest eşleştiricileri gösterilmiyor. Çalıştırılabilir tam sürüm aşağıda yer almaktadır. ErrorCollector kullanma örneği.
@Rule nedir? JUnit?
JUnit Testlerin özel bir şekilde ele alınmasını sağlar, Test Durumu veya test paketini kullanarak @Kural ek açıklaması@Rule kullanarak testin davranışını kolayca ekleyebilir veya yeniden tanımlayabilirsiniz.
Sistem tarafından sağlanan çeşitli yerleşik kurallar bulunmaktadır. JUnit Bir test uzmanının kullanabileceği bir API ve ayrıca kendi kuralınızı da yazabilirsiniz. Kural alanı herkese açık, statik olmayan ve TestRule arayüzünü uygulayan bir türde olmalıdır.
Aşağıdaki kod satırında, @Rule ek açıklamasının Hata Toplayıcı ile birlikte nasıl kullanılacağı gösterilmektedir:
@Rule public ErrorCollector collector= new ErrorCollector();
JUnit 5 notu: Jupiter, kuralları Uzantı API'si ile değiştirdiğinden, org.junit.jupiter'da @Rule ve ErrorCollector mevcut değildir. En yakın karşılıkları Assertions.assertAll() ve AssertJ SoftAssertions'tır. JUnit Burada gösterilen 4 kodlu kod, eski model motorda hala çalışıyor. Bakınız... JUnit ek açıklamalar Haritanın tamamı için eğitim videosuping.
ErrorCollector kullanma örneği
Hata toplayıcıyı anlamak için, tüm hataları toplamak üzere bir sınıf ve bir kural oluşturalım. Burada addError(throwable) kullanarak tüm hataları ekleyeceksiniz.
Aşağıdaki kod, basitçe bir "Hata Toplayıcı nesnesi" olan bir kural oluşturur. Bu kural, sorunu en sonunda raporlamak için tüm hataları toplamak amacıyla kullanılır:
ErrorCollectorExample.java
package guru99.junit; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); System.out.println("Hello"); try { Assert.assertTrue("A " == "B"); } catch (Throwable t) { collector.addError(t); } System.out.println("World!!!!"); } }
TestRunner.java
Yukarıdaki test sınıfını bir test çalıştırıcısına ekleyelim ve tüm hataları toplamak için çalıştıralım. Aşağıdaki koda bakın:
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(ErrorCollectorExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Çıktı:
Başarısızlığı görün trace, ki tracTüm hataları tek bir yerde toplar. JUnit Görüntüleme işlemi tek bir çalıştırma sayıyor ancak iki hata ve bir başarısızlık bildiriyor, her birinin kendi satır numarası var:
Faydaları JUnit Hata Toplayıcı
Kullanabilirsiniz JUnit iddia Örneğin, işlevsel veya GUI doğrulama için:
- `assertEquals(String message, Object expected, Object actual)`, iki nesnenin eşit olup olmadığını karşılaştırır.
- Benzer şekilde,asserTrue(Boolean koşulu), bir koşulun doğru olduğunu ileri sürer.
Doğrulama ifadeleri kullanılarak, doğrulama testleri kolaylaşır. Ancak önemli bir sorun, tek bir doğrulama ifadesi başarısız olsa bile test yürütmesinin durmasıdır.
Test otomasyonunun başarısı için test sürekliliği ve kurtarma işlemlerinin yönetimi çok önemlidir ve özellikle uzun süreli testlerde büyük önem taşır. Selenium Tarayıcının her başarısız kontrolünden sonra yeniden başlatılmasının maliyetli olduğu akışlarda, Hata Toplayıcı (Error Collector) bu tür senaryoları ele almanın en iyi yoludur.

