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.

  • 🔘 Amaç: Bir doğrulama, ağ veya GUI kontrolü başarısız olduktan sonra teste devam edin ve toplanan tüm hataları aynı anda raporlayın.
  • ☑️ beyanı: @Rule, herkese açık, statik olmayan bir ErrorCollector alanında şu bilgiyi verir: JUnit Kuralı her teste eklemek.
  • Toplama: `addError(Throwable)` yöntemi, hem Hata hem de İstisna nesnesinin ebeveyni olan `Throwable` sayesinde herhangi bir Hata veya İstisna nesnesini saklar.
  • 🧪 Kontrol etme: checkThat() fonksiyonu, eşleşmeyi değerlendirir ve kalan ifadeleri durdurmadan bir uyuşmazlık tespit eder.
  • Raporlama: Başarısızlık trace, toplanan her fırlatılabilir nesneyi kendi satır numarasıyla birlikte listeler. JUnit görünümü.
  • 📌 JUnit 5: Jüpiter'de kurallar ortadan kalktı, bu nedenle assertAll() veya AssertJ SoftAssertions aynı rolü üstleniyor.

JUnit ErrorCollector kuralı, tek bir test çalıştırmasında birden fazla hatayı toplar.

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:

Eclipse JUnit başarısızlık tracTek bir çalıştırmada toplanan iki Throwable hatası ve bir AssertionError hatasının listesini sunuyoruz.

Faydaları JUnit Hata Toplayıcı

Kullanabilirsiniz JUnit iddia Örneğin, işlevsel veya GUI doğrulama için:

  1. `assertEquals(String message, Object expected, Object actual)`, iki nesnenin eşit olup olmadığını karşılaştırır.
  2. 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.

SSS

`addError(Throwable)` daha önce yakaladığınız veya oluşturduğunuz bir hatayı kaydeder. `checkThat(value, matcher)` bir Hamcrest eşleştiricisini değerlendirir ve otomatik olarak bir uyuşmazlığı kaydeder, böylece geri kalan ifadelerin çalışmasına izin verirken bir doğrulama gibi okunur.

Evet. Metot tamamlanana kadar çalışır, sonra... JUnit Başarısız olduğunu işaretler ve başarısızlık sırasında toplanan tüm atılabilir eşyaları yazdırır. trace. Örnek ekran görüntüsü, tek bir test yönteminden iki hata ve bir başarısızlık bildirmektedir.

JUnit Test sınıfını @Rule ile işaretlenmiş genel örnek alanları için tarar ve her birini her test yönteminin etrafına uygular. Özel veya statik alanlar göz ardı edilir ve JUnit Testi çalıştırmak yerine bir başlatma hatası veriyor.

Hayır. Jupiter kural mekanizmasını kaldırdı, bu nedenle org.junit.rules.ErrorCollector yalnızca şu durumlarda mevcuttur: JUnit 4. Gruplandırılmış doğrulama işlemleri için Assertions.assertAll() yöntemini kullanın veya daha kapsamlı eşleştirmeler gerektiğinde AssertJ SoftAssertions ekleyin.

Evet, bu yaygın bir yöntem. Birden fazla alana sahip bir sayfa, ilk uyuşmazlıkta işlemi durdurmak yerine tüm uyuşmazlıkları toplayarak tek seferde doğrulanabilir; bu da bulunan her hata için tarayıcı oturumunun yeniden başlatılmasını önler.

Her ikisi de raporlamayı erteler, ancak SoftAssert testin sonunda açık bir assertAll() çağrısı gerektirirken, ErrorCollector yöntem döndüğünde otomatik olarak raporlama yapar. assertAll()'ı unutmak TestNG Başarısızlıklarını sessizce gizler.

Yapay zeka asistanları grubu uzun bir başarısızlık yaşadı. tracKök nedenine göre analiz edildiğinde, toplanan yirmi atık malzeme birkaç farklı kusura indirgenir. Ayrıca, hangi kontrollerin ayrı testler yerine tek bir toplu çalıştırmada birlikte yapılması gerektiğini de gösterirler.

GitHub Yardımcı Pilotu @Rule alanını kolayca yazıyor, ancak genellikle kuralların bulunmadığı bir Jupiter test sınıfına karıştırıyor. Test paketini çalıştırmadan önce içe aktarmaların org.junit olduğundan emin olun.

Bu yazıyı şu şekilde özetleyin: