Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi · Pelajaran

Pengujian Pengecualian dan Tamat Masa

Sahkan pengecualian yang dijangka dan laksanakan tamat masa untuk mencegah gelung tak terhingga atau kes ujian yang berjalan terlalu lama.

Pelajaran 3 daripada 411 langkah

Pengujian Pengecualian dan Tamat Masa ialah pelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi merangkumi sejumlah 4 pelajaran.

Menguji Ralat yang Dijangkakan

Adakalanya, kod anda direka bentuk untuk mencetuskan ralat dalam keadaan tertentu yang tidak sah. Contohnya, pembahagian dengan sifar. Pengujian pengecualian memastikan kod anda mengendalikan situasi ini dengan betul.

  • Mengesahkan laluan berjaya dan laluan gagal.
  • Memastikan mesej ralat anda tepat.

Menangkap Pengecualian dengan JUnit

JUnit 5 menyediakan kaedah assertThrows untuk mengesahkan bahawa pengecualian tertentu dicetuskan. Ini ialah cara yang disyorkan dan paling kemas untuk menguji pengecualian yang dijangkakan.

  • Kaedah ini menerima jenis pengecualian yang dijangkakan (contohnya, IllegalArgumentException.class).
  • Kaedah ini menerima ungkapan lambda (secebis kod kecil) yang sepatutnya mencetuskan pengecualian tersebut.

`assertThrows` dalam Tindakan

Mari kita lihat assertThrows dalam ujian ringkas. Kaedah divide milik Calculator sepatutnya mencetuskan IllegalArgumentException jika pembahagi ialah sifar.

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class Calculator {
    public int divide(int a, int b) {
        if (b == 0) {
            throw new IllegalArgumentException("Divisor cannot be zero");
        }
        return a / b;
    }
}

public class ExceptionTest {
    @Test
    void testDivideByZeroThrowsException() {
        Calculator calc = new Calculator();
        assertThrows(IllegalArgumentException.class, () -> {
            calc.divide(10, 0);
        });
    }
}

Menyemak Butiran Pengecualian

Selalunya, mengetahui *bahawa* pengecualian telah dicetuskan sahaja tidak mencukupi. Anda mungkin juga ingin mengesahkan butirannya, seperti mesej pengecualian atau sifat-sifat lain.

Kaedah assertThrows mengembalikan objek pengecualian sebenar, yang membolehkan anda melakukan pengesahan lanjut terhadapnya.

Mengesahkan Mesej Pengecualian

Di sini, kami menyimpan objek pengecualian yang dikembalikan oleh assertThrows, kemudian menggunakan assertEquals untuk mengesahkan mesejnya. Hal ini menjadikan ujian pengecualian anda sangat tepat.

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class Calculator {
    public int divide(int a, int b) {
        if (b == 0) {
            throw new IllegalArgumentException("Divisor cannot be zero");
        }
        return a / b;
    }
}

public class ExceptionMessageTest {
    @Test
    void testDivideByZeroMessage() {
        Calculator calc = new Calculator();
        IllegalArgumentException thrown = assertThrows(
            IllegalArgumentException.class,
            () -> calc.divide(10, 0),
            "Expected divide() to throw, but it didn't"
        );
        assertEquals("Divisor cannot be zero", thrown.getMessage());
    }
}

Mengelakkan Ujian Tanpa Kesudahan dengan Had Masa

Adakalanya, secebis kod boleh tersekat dalam gelung tanpa penghujung atau mengambil masa yang luar biasa lama untuk selesai. Keadaan ini boleh menyebabkan himpunan ujian anda tergantung tanpa batas.

Had masa ialah ciri penting yang menggagalkan ujian secara automatik jika ujian tersebut melebihi tempoh yang ditetapkan, sekali gus memastikan himpunan ujian anda berjalan dengan cekap.

Menetapkan Had Masa dengan `@Timeout`

JUnit 5 menggunakan anotasi @Timeout untuk menetapkan tempoh maksimum bagi kaedah ujian atau keseluruhan kelas ujian. Anda menentukan value maksimum dan unit masa.

  • Unit yang biasa digunakan termasuk TimeUnit.SECONDS, TimeUnit.MILLISECONDS, TimeUnit.MINUTES.
  • Jika ujian berjalan lebih lama daripada masa yang ditetapkan, ujian tersebut akan gagal.

Contoh Had Masa Peringkat Kaedah

Berikut ialah cara menggunakan had masa pada satu kaedah ujian. Jika longRunningTask() mengambil masa lebih daripada 1 saat, ujian ini akan gagal secara automatik.

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import java.util.concurrent.TimeUnit;
import static org.junit.jupiter.api.Assertions.*;

public class TimeoutMethodTest {

    // A method that might take too long
    private void longRunningTask() throws InterruptedException {
        Thread.sleep(1500); // Simulates a task taking 1.5 seconds
    }

    @Test
    @Timeout(value = 1, unit = TimeUnit.SECONDS)
    void testTaskShouldCompleteWithinOneSecond() throws InterruptedException {
        longRunningTask(); // This will cause the test to fail due to timeout
        assertTrue(true, "Task completed (but it will timeout)");
    }
}

Had Masa Peringkat Kelas

Anda juga boleh menggunakan anotasi @Timeout pada peringkat kelas. Apabila diletakkan pada kelas ujian, semua kaedah ujian dalam kelas tersebut akan mewarisi had masa yang ditetapkan.

Jika kaedah ujian turut mempunyai anotasi @Timeout sendiri, had masa peringkat kaedah akan mengatasi had masa peringkat kelas untuk kaedah tersebut.

Uji Pengetahuan Anda

Apakah ciri JUnit 5 yang paling sesuai untuk memastikan kaedah ujian selesai dilaksanakan dalam had masa yang telah ditetapkan, dan gagal jika melebihi had tersebut?

Imbas Kembali: Pengecualian & Had Masa

Dalam pelajaran ini, anda telah mempelajari cara menulis ujian yang kukuh untuk ralat yang dijangkakan dan mengelakkan ujian yang tidak terkawal:

  • Anda menggunakan assertThrows untuk mengesahkan bahawa pengecualian tertentu dicetuskan oleh kod anda.
  • Anda mempelajari cara mengesahkan butiran tertentu bagi pengecualian, seperti mesejnya.
  • Anda menggunakan anotasi @Timeout untuk menetapkan had masa bagi kaedah dan kelas ujian, sekali gus memastikan pelaksanaan ujian yang cekap.
Percuma untuk bermula

Pelajari Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Pengujian Pengecualian dan Tamat Masa” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi, termasuk “Pengujian Pengecualian dan Tamat Masa”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengujian Pengecualian dan Tamat Masa”?

Sahkan pengecualian yang dijangka dan laksanakan tamat masa untuk mencegah gelung tak terhingga atau kes ujian yang berjalan terlalu lama. Anda berlatih Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Pengujian Pengecualian dan Tamat Masa” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi ini?

Ya. Setiap pelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Kitar Hayat dan Susunan Ujian
  2. Ujian Berparameter dan Dinamik
  3. Pengujian Pengecualian dan Tamat Masa
  4. Ujian Bersyarat dan Andaian
← Kembali ke Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi