Rumah  >  Artikel  >  Java  >  Apakah perangkap biasa ujian fungsi Java?

Apakah perangkap biasa ujian fungsi Java?

王林
王林asal
2024-04-28 15:48:02372semak imbas

Perangkap biasa yang perlu diketahui apabila unit menguji fungsi Java termasuk: Mengabaikan keadaan sempadan seperti input kosong, nilai maksimum atau minimum. Input diandaikan sah dan input yang tidak sah tidak disahkan. Penumbunan tidak dilakukan apabila bergantung pada perpustakaan pihak ketiga, mengakibatkan ujian tidak stabil. Lupakan tentang pengecualian ujian yang mungkin dilemparkan oleh fungsi.

Apakah perangkap biasa ujian fungsi Java?

Perangkap biasa dalam ujian fungsi Java

Apabila unit menguji fungsi Java, anda perlu memberi perhatian khusus kepada beberapa perangkap biasa, yang mungkin membawa kepada ujian yang tidak lengkap atau tidak boleh dipercayai.

1. Abaikan syarat sempadan

Ujian keadaan sempadan merujuk kepada ujian kelakuan input dan output fungsi di bawah nilai ekstrem. Terlupa untuk menguji keadaan sempadan, seperti input kosong, nilai maksimum atau minimum, boleh menyebabkan kecacatan yang belum ditemui.

Kes praktikal:

@Test
public void testMax() {
    assertTrue(Math.max(2, 5) == 5);
}

Ujian ini tidak meliputi kes fungsi Math.max dengan nombor negatif atau 0 sebagai input. Ujian yang lebih komprehensif akan kelihatan seperti ini: Math.max 函数与负数或 0 作为输入的情况。一个更全面的测试应该如下所示:

@Test
public void testMax() {
    assertTrue(Math.max(2, 5) == 5);
    assertTrue(Math.max(0, -5) == 0);
}

2. 假设输入有效

测试不应该假设输入总是有效的。开发人员应该考虑无效输入的可能性,并在必要时验证输入。

实战案例:

@Test
public void testSqrt() {
    assertTrue(Math.sqrt(4) == 2.0);
}

该测试没有考虑 Math.sqrt 接受负数输入的情况,这会导致 IllegalArgumentException。一个更健壮的测试应该如下所示:

@Test
public void testSqrt() {
    assertTrue(Math.sqrt(4) == 2.0);
    try {
        Math.sqrt(-4);
        fail("Expected IllegalArgumentException");
    } catch (IllegalArgumentException e) {}
}

3. 依赖第三方库时未进行打桩

当测试函数依赖于第三方库时,如果不进行打桩,就可能导致测试失败或不稳定。打桩允许模拟第三方库的行为,以控制测试环境。

实战案例:

@Test
public void testSendMail() {
    assertTrue(MailSender.sendMail("to@example.com", "subject", "body"));
}

该测试没有打桩 MailSender 类,因此测试依赖于实际发送邮件的行为。这可能导致测试失败,或者在邮件发送失败时导致 flakiness。

4. 忘记测试异常

函数可能抛出异常,而忘记测试这些异常可能会导致错误或不完整的测试覆盖率。

实战案例:

@Test
public void testDivide() {
    assertTrue(Divider.divide(10, 2) == 5);
}

该测试没有测试 Divider 类在输入为 0 时抛出的 ArithmeticException

@Test
public void testDivide() {
    assertTrue(Divider.divide(10, 2) == 5);
    try {
        Divider.divide(10, 0);
        fail("Expected ArithmeticException");
    } catch (ArithmeticException e) {}
}

2. Anggap input adalah sah 🎜🎜Pengujian seharusnya tidak menganggap bahawa input sentiasa sah. Pembangun harus mempertimbangkan kemungkinan input tidak sah dan mengesahkan input jika perlu. 🎜🎜🎜Kes praktikal: 🎜🎜rrreee🎜Ujian ini tidak mengambil kira kes di mana Math.sqrt menerima input negatif, yang akan menghasilkan IllegalArgumentException. Ujian yang lebih mantap sepatutnya kelihatan seperti ini: 🎜rrreee🎜3 Tiada stub apabila bergantung pada perpustakaan pihak ketiga🎜🎜Apabila fungsi ujian bergantung pada perpustakaan pihak ketiga, jika stub tidak dilakukan, ujian mungkin gagal atau tidak stabil. . Stubbing membolehkan simulasi gelagat perpustakaan pihak ketiga untuk mengawal persekitaran ujian. 🎜🎜🎜Kes praktikal: 🎜🎜rrreee🎜Ujian ini tidak mencantas kelas MailSender, jadi ujian bergantung pada tingkah laku sebenar menghantar e-mel. Ini boleh menyebabkan ujian gagal, atau menyebabkan kekeliruan jika e-mel gagal dihantar. 🎜🎜4 Lupa untuk menguji pengecualian 🎜🎜 Fungsi boleh membuang pengecualian, dan terlupa untuk menguji pengecualian ini boleh membawa kepada pepijat atau liputan ujian yang tidak lengkap. 🎜🎜🎜Kes praktikal: 🎜🎜rrreee🎜Ujian ini tidak menguji ArithmeticException yang dilemparkan oleh kelas Divider apabila input adalah 0. Ujian yang lebih komprehensif akan kelihatan seperti ini: 🎜rrreee

Atas ialah kandungan terperinci Apakah perangkap biasa ujian fungsi Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn