JUnit ErrorCollector @Rule dengan Contoh

โšก Ringkasan Cerdas

JUnit ErrorCollector adalah aturan yang memungkinkan pengujian tetap berjalan setelah terjadi kegagalan, mengumpulkan setiap objek kesalahan dan melaporkannya bersama-sama setelah metode pengujian selesai, alih-alih berhenti.ping pada masalah pertama.

  • ๐Ÿ”˜ Tujuan: Lanjutkan pengujian setelah sebuah pernyataan, pemeriksaan jaringan, atau GUI gagal, lalu laporkan semua kesalahan yang terkumpul sekaligus.
  • โ˜‘๏ธ Pernyataan: @Rule pada field ErrorCollector publik non-statis memberi tahu JUnit untuk melampirkan aturan tersebut pada setiap pengujian.
  • โœ… Mengumpulkan: addError(Throwable) menyimpan Error atau Exception apa pun, karena Throwable adalah induk dari keduanya.
  • ๐Ÿงช Memeriksa: checkThat() mengevaluasi sebuah matcher dan mencatat ketidakcocokan tanpa menghentikan pernyataan yang tersisa.
  • ๏ธ Pelaporan: Kegagalan trace mencantumkan setiap barang yang bisa dilempar yang telah dikumpulkan beserta nomor barisnya masing-masing di dalam JUnit melihat.
  • ๐Ÿ“Œ JUnit 5: Aturan-aturan telah dihapus dari Jupiter, jadi assertAll() atau AssertJ SoftAssertions memainkan peran yang sama.

JUnit Aturan ErrorCollector mengumpulkan beberapa kesalahan dalam satu kali pengujian.

Dalam skenario normal, setiap kali Anda mengidentifikasi kesalahan apa pun selama pelaksanaan pengujian, Anda akan menghentikan pengujian, memperbaiki kesalahan, dan menjalankan kembali pengujian.

Tapi JUnit memiliki pendekatan yang sedikit berbeda. Dengan JUnit Dengan pengumpul kesalahan, Anda masih dapat melanjutkan eksekusi pengujian bahkan setelah masalah ditemukan atau pengujian gagal. Pengumpul kesalahan mengumpulkan semua objek kesalahan dan melaporkannya hanya sekali, setelah eksekusi pengujian selesai.

Mengapa menggunakan Kolektor Kesalahan?

Saat menulis skrip pengujian, Anda ingin menjalankan semua pengujian meskipun ada baris kode yang gagal karena kegagalan jaringan, kegagalan pernyataan, atau alasan lain. Dalam situasi tersebut, Anda masih dapat melanjutkan menjalankan skrip pengujian menggunakan fitur khusus yang disediakan oleh JUnit dikenal sebagai โ€œpengumpul kesalahanโ€.

Untuk ini, JUnit menggunakan @Anotasi aturan, yang digunakan untuk membuat objek pengumpul kesalahan. Setelah objek pengumpul kesalahan dibuat, Anda dapat dengan mudah menambahkan semua kesalahan ke dalam objek tersebut menggunakan metode tersebut. addError (Kesalahan yang dapat dilempar). Seperti yang Anda ketahui, Dapat dibuang adalah kelas super dari Pengecualian ke error kelas di JavaSaat Anda menambahkan kesalahan dengan cara ini, kesalahan tersebut akan dicatat dalam log. JUnit hasil tes.

Keuntungan menambahkan semua kesalahan ke dalam Error Collector adalah Anda dapat memverifikasi semua kesalahan sekaligus. Selain itu, jika skrip gagal di tengah jalan, eksekusi tetap berlanjut hingga akhir metode pengujian.

NoteDalam kasus penggunaan assert sederhana atau blok try/catch, penggunaan metode pengumpul kesalahan tidak akan dimungkinkan.

Kode sampel

Untuk memahami lebih lanjut tentang Error Collector, lihat contoh kode di bawah ini, yang menunjukkan cara membuat objek Error Collector dan menambahkan semua kesalahan ke objek tersebut. tracMasalahnya adalah:

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.		
    }		
}	

Catatan: Ini adalah contoh ilustratif.tract, bukan file yang dapat dikompilasi. Komentar terakhirnya berlanjut ke baris kedua tanpa awalan //, dan getResults() serta pencocok Hamcrest tidak ditampilkan. Versi lengkap yang dapat dijalankan ada di bawah ini. Contoh menggunakan ErrorCollector.

Apa itu @Rule dalam JUnit?

JUnit menyediakan jenis penanganan tes khusus, Uji Kasus atau rangkaian pengujian dengan menggunakan @Anotasi aturanDengan menggunakan @Rule, Anda dapat dengan mudah menambahkan atau mendefinisikan ulang perilaku pengujian.

Terdapat beberapa aturan bawaan yang disediakan oleh JUnit API yang dapat digunakan oleh penguji, dan Anda juga dapat menulis aturan Anda sendiri. Bidang aturan harus bersifat publik, non-statis, dan bertipe yang mengimplementasikan TestRule.

Lihat baris kode di bawah ini, yang menunjukkan cara menggunakan anotasi @Rule bersama dengan Error Collector:

@Rule				
public ErrorCollector collector= new ErrorCollector();

JUnit Catatan tahun 5: Jupiter mengganti aturan dengan API Ekstensi, sehingga @Rule dan ErrorCollector tidak ada di org.junit.jupiter. Padanan terdekatnya adalah Assertions.assertAll() dan AssertJ SoftAssertions. JUnit Kode 4 yang ditampilkan di sini masih berjalan di mesin antik ini. Lihat JUnit penjelasan tutorial untuk peta lengkapping.

Contoh menggunakan ErrorCollector

Untuk memahami pengumpul kesalahan, mari kita buat sebuah kelas dan aturan untuk mengumpulkan semua kesalahan. Anda akan menambahkan semua kesalahan menggunakan addError(throwable) di sini.

Lihat kode di bawah ini, yang hanya membuat aturan yang tidak lain adalah "objek Pengumpul Kesalahan." Kode ini selanjutnya digunakan untuk menambahkan semua kesalahan agar masalah tersebut dapat dilaporkan pada akhirnya:

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

Mari kita tambahkan kelas pengujian di atas ke dalam test runner dan jalankan untuk mengumpulkan semua kesalahan. Lihat kode di bawah ini:

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());							
   }		
}      

Keluaran:

Lihat kegagalannya trace, yang tracSemua kesalahan terkumpul di satu tempat. The JUnit Tampilan tersebut menghitung satu kali eksekusi tetapi melaporkan dua kesalahan dan satu kegagalan, masing-masing dengan nomor barisnya sendiri:

Eclipse JUnit kegagalan trace mencantumkan dua kesalahan Throwable dan satu AssertionError yang terkumpul dalam satu kali eksekusi

Manfaat JUnit Kolektor Kesalahan

Anda bisa menggunakan a JUnit pernyataan untuk validasi fungsional atau GUI, misalnya:

  1. assertEquals(String message, Object expected, Object actual), yang membandingkan apakah dua objek itu sama.
  2. Demikian pula, tegaskanTrue(Kondisi Boolean) menyatakan bahwa suatu kondisi benar.

Dengan menggunakan assertion, pengujian validasi menjadi mudah. โ€‹โ€‹Namun, satu masalah utama adalah eksekusi pengujian akan berhenti bahkan jika satu assertion saja gagal.

Penanganan kontinuitas dan pemulihan pengujian sangat penting untuk keberhasilan otomatisasi pengujian, dan hal ini paling penting dalam jangka panjang. Selenium Alur kerja di mana memulai ulang browser setelah setiap pengecekan yang gagal sangat mahal. Error Collector adalah cara terbaik untuk menangani skenario seperti itu.

Pertanyaan Umum Demo Slot

addError(Throwable) mencatat kesalahan yang telah Anda tangkap atau buat. checkThat(value, matcher) mengevaluasi matcher Hamcrest dan secara otomatis mencatat ketidakcocokan, sehingga terbaca seperti pernyataan assertion sambil tetap memungkinkan pernyataan lainnya untuk dijalankan.

Ya. Metode tersebut berjalan hingga selesai, lalu JUnit menandai kegagalan dan mencetak setiap barang yang dikumpulkan dalam kegagalan tersebut. trace. Contoh tangkapan layar tersebut melaporkan dua kesalahan dan satu kegagalan dari satu metode pengujian.

JUnit Memindai kelas pengujian untuk bidang instance publik yang diberi anotasi @Rule dan menerapkannya di sekitar setiap metode pengujian. Bidang privat atau statis diabaikan, dan JUnit Menimbulkan kesalahan inisialisasi alih-alih menjalankan pengujian.

Tidak. Jupiter menghapus mekanisme aturan tersebut, jadi org.junit.rules.ErrorCollector hanya ada di JUnit 4. Gunakan Assertions.assertAll() untuk pernyataan yang dikelompokkan, atau tambahkan AssertJ SoftAssertions bila diperlukan pencocok yang lebih kaya.

Ya, dan ini adalah pola yang umum. Halaman dengan beberapa kolom dapat divalidasi dalam satu kali proses, mengumpulkan setiap ketidaksesuaian alih-alih berhenti pada yang pertama, sehingga menghindari memulai ulang sesi browser untuk setiap cacat yang ditemukan.

Keduanya menunda pelaporan, tetapi SoftAssert memerlukan panggilan assertAll() secara eksplisit di akhir pengujian, sementara ErrorCollector melaporkan secara otomatis ketika metode tersebut kembali. Melupakan assertAll() di TestNG menyembunyikan kegagalan secara diam-diam.

Kelompok asisten AI mengalami kegagalan jangka panjang. tracBerdasarkan akar penyebabnya, sehingga dua puluh masalah yang dikumpulkan dapat direduksi menjadi beberapa cacat yang berbeda. Mereka juga menunjukkan pemeriksaan mana yang harus dilakukan bersamaan dalam satu rangkaian pengujian daripada dalam pengujian terpisah.

Kopilot GitHub Meskipun secara otomatis menulis field @Rule, seringkali field tersebut tercampur ke dalam kelas pengujian Jupiter yang tidak memiliki aturan. Pastikan impornya adalah org.junit sebelum menjalankan rangkaian pengujian.

Ringkaslah postingan ini dengan: