Tes kotak putih mengharuskan setiap baris kode ditutup setidaknya sekali.
@Apimodelproperty ("Kategori Murid")@ManyToOne // Tetapkan bidang kategori subjek menjadi kosong @joincolumn (nullable = false) @jsonview ({noneJsonview.class, pengukuran Disiplin private disipline.getallbyDisciplineid.class}) disipliner private;Mengambil contoh sebelumnya pengaturan subjek tidak kosong sebagai kasus, kita perlu menguji dua situasi: pengecualian ketika mereka kosong dan menyimpannya secara normal ketika mereka tidak kosong.
@Testpublic void saveTest () {logger.debug ("Unit baru kategori pengukuran"); Pengukuran Ukuran UkuranSategori = strategori baru = strategori baru (); Logger.debug ("Test Save"); pengukuranUntCategoryService.Save (pengukuran Umbah);} Di sini kami memanggil metode save , tetapi IDE tidak meminta kami untuk menangkap pengecualian, tetapi itu tidak berarti bahwa metode save tidak melempar pengecualian. Itu dapat melempar RuntimeException yang tidak diperiksa atau pengecualian yang diturunkan.
Untuk menguji pengecualian ini, pertama -tama kami menjalankan baris kode ini untuk melihat pengecualian apa yang muncul.
org.springframework.dao.dataintegrityviolationException: tidak dapat menjalankan pernyataan; Sql [n/a]; kendala [null]; pengecualian bersarang adalah org.hibernate.exception.constraintviolationException: tidak dapat menjalankan pernyataan
Disebabkan oleh: org.hibernate.exception.constraintviolationException: tidak dapat menjalankan pernyataan
Disebabkan oleh: org.h2.jdbc.jdbcsqlexception: null tidak diizinkan untuk kolom "disiplin_id"; Pernyataan SQL:
Sisipkan ke nilai-nilai pengukuran_unit_category (id, disiplin_id, isasc) (null, ?,?) [23502-194]
Kami melihat tiga pengecualian, pertama, JdbcSQLException saat memasukkan catatan ini, maka pengecualian menyebabkan ConstraintViolationException , dan pengecualian baru menyebabkan DataIntegrityViolationException .
Ini Caused by sebenarnya merupakan enkapsulasi pengecualian. Misalnya, lapisan yang mendasarinya dapat melemparkan pengecualian, tetapi kami umumnya menangani pengecualian pada tingkat yang relatif tinggi.
Ambillah ini sebagai contoh. DataIntegrityViolationException Data melanggar pengecualian, dan banyak jenis pengecualian dapat terjadi, sehingga metode pemrosesan pengecualian ini sama atau serupa.
Ketika lapisan yang mendasarinya melempar JdbcSQLException , kemudian memanggil metodenya untuk catch pengecualian, dan membangun ConstraintViolationException pengecualian baru dengan Exception Exception (pengecualian pembatasan), kemudian melemparkannya ke lapisan atas, dan kemudian menangkapnya ke lapisan DataIntegrityViolationException , membangunnya. Kami tidak menanganinya, dan kemudian konsol melaporkan kesalahan.
Keuntungan menjaga enkapsulasi dan melempar ke atas adalah bahwa saya dapat menggunakan pengecualian untuk menangani situasi yang sama, dan kemudian ketika berhadapan dengan pengecualian ini, saya dapat melacak sumbernya dan tetap akurat untuk apa yang menyebabkannya. Jika paket ini tidak tersedia, kita harus langsung pergi ke pengecualian catch yang mendasari untuk secara akurat menemukan kesalahan.
OK, pengecualian yang perlu kita tangkap di sini adalah pengecualian DataIntegrityViolationException yang dilemparkan kepada kita oleh aplikasi.
@Testpublic void saveTest () {logger.debug ("Persiapan Data Tes Dasar"); Pengukuran Ukuran UkuranSategori = strategori baru = strategori baru (); Boolean CatchException = false; Logger.debug ("Test Save, berharap untuk melempar pengecualian"); coba {pengukuran Upah KategoriService.Save (strategori pengukuran); } catch (DataAintegrityViolationException e) {catchException = true; } logger.debug ("menegaskan bahwa pengecualian penangkapan itu benar"); AssertThat (catchException) .istrue ();}Jalankan tes dan lulus.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.