Rumah Java javaTutorial Mengautomasikan Ujian dalam But Spring dengan JUnit dan Mockito

Mengautomasikan Ujian dalam But Spring dengan JUnit dan Mockito

Sep 09, 2024 pm 08:30 PM

Automating Tests in Spring Boot with JUnit and Mockito

Dalam pembangunan perisian, mengekalkan kod berkualiti tinggi adalah penting, terutamanya apabila sistem berkembang dalam kerumitan. Ujian automatik memainkan peranan penting dalam memastikan ciri baharu tidak memecahkan kefungsian sedia ada dan kod itu kekal teguh dan boleh dipercayai dari semasa ke semasa. Untuk aplikasi Spring Boot, JUnit dan Mockito ialah dua alat yang paling popular untuk ujian unit dan kebergantungan mengejek, masing-masing. Dalam siaran ini, kami akan meneroka cara memanfaatkan alatan ini untuk membuat ujian automatik yang berkesan dalam Spring Boot, memastikan aplikasi anda kekal stabil dan boleh diselenggara.

JUnit ialah rangka kerja ujian yang digunakan secara meluas untuk Java yang menyediakan anotasi dan penegasan untuk membantu menstruktur dan melaksanakan ujian dengan berkesan. Ia membolehkan pembangun menulis ujian boleh berulang dan menyokong kedua-dua ujian unit dan penyepaduan. Sebaliknya, Mockito ialah rangka kerja mengejek yang berkuasa yang membolehkan penciptaan objek olok-olok untuk tujuan ujian. Ia membolehkan pembangun mensimulasikan tingkah laku kebergantungan kompleks, mengasingkan kefungsian yang sedang diuji. Dengan menggunakan JUnit dalam kombinasi dengan Mockito, kami boleh menguji logik perniagaan aplikasi Spring Boot kami dengan teliti tanpa bergantung pada sambungan pangkalan data sebenar, perkhidmatan luaran atau konfigurasi yang kompleks.

Mari kita menyelami contoh praktikal untuk melihat cara JUnit dan Mockito boleh digunakan bersama dalam aplikasi Spring Boot. Kami akan membuat kelas perkhidmatan ringkas dan menulis ujian untuknya menggunakan JUnit dan Mockito.

Andaikan kami mempunyai kelas UserService yang bergantung pada UserRepository untuk mengambil data pengguna:

@Service
public class UserService {

    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User getUserById(Long id) {
        return userRepository.findById(id)
                .orElseThrow(() -> new UserNotFoundException("User not found"));
    }
}

Salin selepas log masuk

Di sini, UserService bergantung pada UserRepository, iaitu antara muka repositori Spring Data JPA. Untuk menguji getUserByIdmethod tanpa memukul pangkalan data, kita boleh menggunakan Mockito untuk mengejek UserRepositorydan JUnit untuk menegaskan tingkah laku UserService.

Begini cara kami boleh menulis ujian untuk UserService:

@SpringBootTest
public class UserServiceTest {

    @Mock
    private UserRepository userRepository;

    @InjectMocks
    private UserService userService;

    @BeforeEach
    public void setUp() {
        MockitoAnnotations.openMocks(this);
    }

    @Test
    public void testGetUserById_Success() {
        // Arrange
        User user = new User(1L, "John Doe", "john.doe@example.com");
        when(userRepository.findById(1L)).thenReturn(Optional.of(user));

        // Act
        User result = userService.getUserById(1L);

        // Assert
        assertEquals("John Doe", result.getName());
        assertEquals("john.doe@example.com", result.getEmail());
    }

    @Test
    public void testGetUserById_UserNotFound() {
        // Arrange
        when(userRepository.findById(1L)).thenReturn(Optional.empty());

        // Act & Assert
        assertThrows(UserNotFoundException.class, () -> userService.getUserById(1L));
    }
}

Salin selepas log masuk

Dalam kelas UserServiceTest, kami menggunakan anotasi @Mock untuk mencipta contoh olok-olok UserRepository dan anotasi @InjectMocks untuk menyuntik olok-olok ini ke dalam UserService. Kaedah setUp memulakan olok-olok sebelum setiap ujian.

Kami kemudian mentakrifkan dua ujian:

testGetUserById_Success: Ujian ini mengesahkan bahawa apabila pengguna ditemui oleh UserRepository, UserService mengembalikan pengguna yang betul.
testGetUserById_UserNotFound: Ujian ini memastikan bahawa apabila UserRepository mengembalikan hasil kosong, UserService membuang UserNotFoundException.
Ujian ini membolehkan kami mengesahkan kelakuan UserService tanpa perlu bergantung pada pangkalan data sebenar, menjadikannya lebih pantas dan lebih dipercayai.

Mengautomasikan ujian dengan aplikasi JUnit dan Mockito dalam Spring Boot menyediakan cara yang berkesan untuk memastikan kualiti kod dan kestabilan aplikasi. Dengan menulis ujian unit yang komprehensif, pembangun boleh menangkap pepijat pada awal proses pembangunan, menjadikannya lebih mudah untuk memfaktorkan semula kod dan menambah ciri baharu dengan yakin. Gabungan JUnit dan Mockito membolehkan ujian yang jelas dan padat yang memfokuskan pada logik perniagaan aplikasi anda, bebas daripada kerumitan kebergantungan luaran.

Mengambil ujian automatik sebagai amalan teras bukan sahaja meningkatkan kebolehpercayaan pangkalan kod anda tetapi juga meningkatkan aliran kerja pembangunan keseluruhan. Dengan menyepadukan ujian ini ke dalam saluran paip CI/CD anda, anda memastikan bahawa pemeriksaan kualiti adalah automatik dan konsisten, membuka jalan kepada proses pembangunan yang lebih tangkas dan berdaya tahan. Jadi, sama ada anda memulakan projek baharu atau mempertingkatkan projek sedia ada, jadikan ujian automatik dengan JUnit dan Mockito sebagai sebahagian daripada strategi pembangunan anda.

Atas ialah kandungan terperinci Mengautomasikan Ujian dalam But Spring dengan JUnit dan Mockito. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1672
14
Tutorial PHP
1276
29
Tutorial C#
1256
24
Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Apr 19, 2025 pm 04:51 PM

Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Bagaimanakah saya menukar nama kepada nombor untuk melaksanakan penyortiran dan mengekalkan konsistensi dalam kumpulan? Bagaimanakah saya menukar nama kepada nombor untuk melaksanakan penyortiran dan mengekalkan konsistensi dalam kumpulan? Apr 19, 2025 pm 11:30 PM

Penyelesaian untuk menukar nama kepada nombor untuk melaksanakan penyortiran dalam banyak senario aplikasi, pengguna mungkin perlu menyusun kumpulan, terutama dalam satu ...

Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Apr 19, 2025 pm 06:21 PM

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Apr 19, 2025 pm 11:45 PM

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Apr 19, 2025 pm 11:42 PM

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Bagaimana cara menukar objek Java dengan selamat ke array? Bagaimana cara menukar objek Java dengan selamat ke array? Apr 19, 2025 pm 11:33 PM

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Platform e-dagang SKU dan Reka Bentuk Pangkalan Data SPU: Bagaimana untuk mengambil kira kedua-dua atribut yang ditakrifkan oleh pengguna dan produk yang tidak berkesudahan? Platform e-dagang SKU dan Reka Bentuk Pangkalan Data SPU: Bagaimana untuk mengambil kira kedua-dua atribut yang ditakrifkan oleh pengguna dan produk yang tidak berkesudahan? Apr 19, 2025 pm 11:27 PM

Penjelasan terperinci mengenai reka bentuk jadual SKU dan SPU di platform e-dagang Artikel ini akan membincangkan isu reka bentuk pangkalan data SKU dan SPU dalam platform e-dagang, terutamanya bagaimana menangani jualan yang ditentukan pengguna ...

Bagaimana menggunakan penyelesaian cache Redis untuk merealisasikan keperluan senarai kedudukan produk dengan cekap? Bagaimana menggunakan penyelesaian cache Redis untuk merealisasikan keperluan senarai kedudukan produk dengan cekap? Apr 19, 2025 pm 11:36 PM

Bagaimanakah penyelesaian caching Redis menyedari keperluan senarai kedudukan produk? Semasa proses pembangunan, kita sering perlu menangani keperluan kedudukan, seperti memaparkan ...

See all articles