Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi · Pelajaran

Ujian Berparameter dan Dinamik

Tulis ujian yang cekap dan dijalankan dengan berbilang set data menggunakan ujian berparameter serta jana ujian secara dinamik semasa masa jalan.

Pelajaran 2 daripada 412 langkah

Ujian Berparameter dan Dinamik ialah pelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi percuma di CoddyKit. Ini ialah pelajaran 2 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.

Pengenalan Pengujian Berasaskan Data

Bayangkan anda perlu menguji fungsi dengan banyak masukan yang berbeza. Menulis ujian berasingan untuk setiap masukan boleh menjadi membosankan dan berulang.

Pengujian berasaskan data membolehkan anda menjalankan logik ujian yang sama berulang kali, tetapi dengan set data yang berbeza bagi setiap pelaksanaan. Ini menjadikan ujian anda lebih cekap dan lebih mudah diselenggara.

Apakah Ujian Berparameter?

Ujian berparameter dalam JUnit 5 membolehkan anda menulis satu kaedah ujian yang boleh dilaksanakan berulang kali dengan argumen yang berbeza. Daripada menyalin dan menampal kod ujian, anda hanya perlu membekalkan data, manakala JUnit mengendalikan setiap lelaran.

  • Menjimatkan masa dan mengurangkan kod berulang.
  • Meningkatkan liputan ujian dengan memudahkan pengujian kes pinggiran.
  • Menjadikan ujian lebih mudah dibaca dan disenggara.

Menggunakan @ParameterizedTest

Untuk mencipta ujian berparameter, anda menggunakan anotasi @ParameterizedTest dan bukannya @Test. Anda juga perlu menyediakan sumber untuk argumen tersebut.

JUnit 5 menawarkan beberapa sumber argumen, seperti @ValueSource untuk argumen tunggal atau @CsvSource untuk argumen berbilang. Mari kita lihat @ValueSource terlebih dahulu.

Data Ringkas dengan @ValueSource

Anotasi @ValueSource sesuai digunakan untuk membekalkan jenis data primitif yang ringkas secara terus dalam ujian anda. Anotasi ini menyokong strings, ints, longs, doubles, dan banyak lagi.

Setiap nilai dalam sumber akan menyebabkan kaedah ujian dijalankan sekali dengan nilai tersebut sebagai argumen.

@ValueSource dalam Tindakan

Berikut ialah contoh ringkas untuk menguji sama ada rentetan bukan null atau kosong. Perhatikan bahawa kaedah ujian menerima parameter String.

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

class StringValidatorTest {

    @ParameterizedTest
    @ValueSource(strings = {"apple", "banana", "orange"})
    void testStringsAreNotEmpty(String fruit) {
        Assertions.assertNotNull(fruit);
        Assertions.assertFalse(fruit.isEmpty());
    }
}

Argumen Berbilang dengan @CsvSource

Apabila kaedah ujian anda memerlukan lebih daripada satu argumen, @CsvSource amat berguna. Anotasi ini membolehkan anda mentakrifkan argumen sebagai nilai yang dipisahkan koma (CSV).

Setiap rentetan dalam tatasusunan @CsvSource mewakili satu baris data, dan nilai-nilai tersebut dipisahkan mengikut koma untuk dipadankan dengan parameter kaedah ujian.

@CsvSource dalam Tindakan

Mari kita uji fungsi penambahan ringkas. Setiap baris dalam @CsvSource menyediakan dua nombor dan jumlah yang dijangkakan.

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

class CalculatorTest {

    // Simple method to simulate
    int add(int a, int b) {
        return a + b;
    }

    @ParameterizedTest
    @CsvSource({"1, 1, 2", "2, 3, 5", "5, 0, 5"})
    void testAddMethod(int a, int b, int expectedSum) {
        Assertions.assertEquals(expectedSum, add(a, b));
    }
}

Menjana Ujian Dinamik

Adakalanya, data ujian atau bahkan bilangan ujian belum diketahui sehingga masa jalan. Di sinilah Ujian Dinamik amat berguna!

Daripada mentakrifkan semua ujian semasa penyusunan, ujian dinamik membolehkan anda menjana ujian secara terprogram semasa pelaksanaan ujian. Ini berguna untuk senario yang kompleks atau sumber data luaran.

@TestFactory & DynamicTest

Untuk mencipta ujian dinamik, anda menggunakan anotasi @TestFactory. Kaedah yang dianotasi dengan @TestFactory tidak menjalankan ujian itu sendiri, sebaliknya menghasilkan koleksi tika DynamicTest.

  • Kaedah @TestFactory mesti mengembalikan Stream, Collection, Iterable, atau Iterator yang mengandungi DynamicTest.
  • Setiap tika DynamicTest mempunyai nama paparan dan lambda yang boleh dilaksanakan.

Ujian Dinamik dalam Tindakan

Berikut ialah contoh yang menjana ujian untuk panjang rentetan. Setiap ujian dicipta secara langsung berdasarkan senarai perkataan.

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;

import java.util.Arrays;
import java.util.Collection;

class DynamicTestExample {

    @TestFactory
    Collection<DynamicTest> dynamicTestsFromCollection() {
        return Arrays.asList(
            DynamicTest.dynamicTest("Test 'apple' length",
                () -> Assertions.assertEquals(5, "apple".length())),
            DynamicTest.dynamicTest("Test 'banana' length",
                () -> Assertions.assertEquals(6, "banana".length())),
            DynamicTest.dynamicTest("Test 'cat' length",
                () -> Assertions.assertEquals(3, "cat".length()))
        );
    }
}

Berparameter berbanding Dinamik

Ujian berparameter dan ujian dinamik sama-sama membantu mengurangkan kod berulang, tetapi kedua-duanya memenuhi keperluan yang berbeza.

Apakah manfaat utama menggunakan Ujian Berparameter berbanding menulis kaedah @Test individu untuk kes ujian yang serupa?

Imbas Kembali: Pengujian Fleksibel

Tahniah! Anda telah mempelajari cara menjadikan ujian JUnit anda lebih fleksibel dan cekap:

  • Ujian Berparameter (@ParameterizedTest dengan sumber seperti @ValueSource, @CsvSource) membolehkan anda menjalankan logik ujian yang sama dengan berbilang set data yang telah ditetapkan.
  • Ujian Dinamik (@TestFactory) membolehkan anda menjana ujian secara terprogram pada masa jalan, sesuai untuk senario apabila kes ujian ditemui secara dinamik.

Ciri-ciri ini membantu anda menulis ujian yang lebih kemas dan menyeluruh dengan usaha yang lebih sedikit!

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 “Ujian Berparameter dan Dinamik” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi, termasuk “Ujian Berparameter dan Dinamik”, 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 “Ujian Berparameter dan Dinamik”?

Tulis ujian yang cekap dan dijalankan dengan berbilang set data menggunakan ujian berparameter serta jana ujian secara dinamik semasa masa jalan. 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 2 daripada 4.

Berapa lamakah pelajaran “Ujian Berparameter dan Dinamik” 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