Rumah > Java > javaTutorial > kaedah pengesahan () dalam contoh Mockito

kaedah pengesahan () dalam contoh Mockito

Barbara Streisand
Lepaskan: 2025-01-12 18:04:44
asal
667 orang telah melayarinya

Kaedah verify() dalam Mockito digunakan untuk mengesahkan bahawa interaksi khusus dengan objek yang diejek telah berlaku. Ini amat berguna dalam ujian apabila anda ingin memastikan bahawa kaedah tertentu dipanggil dengan hujah tertentu semasa pelaksanaan kod anda.

Di bawah ialah contoh aplikasi Spring Boot dengan lapisan perkhidmatan dan pengawal, dengan kaedah pengesahan() digunakan dalam ujian.

Buat Projek Spring Boot Starter dengan Spring Web Dependency dan laksanakan contoh di bawah

verify() method in Mockito example

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>3.4.1</version>
  <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>com.example</groupId>
 <artifactId>VerifySpringBootExample</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>VerifySpringBootExample</name>
 <description>Demo project for Spring Boot</description>
 <url/>
 <licenses>
  <license/>
 </licenses>
 <developers>
  <developer/>
 </developers>
 <scm>
  <connection/>
  <developerConnection/>
  <tag/>
  <url/>
 </scm>
 <properties>
  <java.version>17</java.version>
 </properties>
 <dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
  </dependency>
 </dependencies>

 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>

</project>

Salin selepas log masuk

Aplikasi Spring Boot
Employee.java

package com.example.demo.model;

public class Employee {
    private String id;
    private String name;

    // Constructor, Getters, and Setters
    public Employee(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Salin selepas log masuk

EmployeeService.java

package com.example.demo.service;

import com.example.demo.model.Employee;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {
    public void saveEmployee(Employee employee) {
        // Business logic to save the employee (e.g., in a database)
        System.out.println("Employee saved: " + employee.getName());
    }
}

Salin selepas log masuk

EmployeeController.java

package com.example.demo.controller;

import com.example.demo.model.Employee;
import com.example.demo.service.EmployeeService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class EmployeeController {
    private final EmployeeService employeeService;

    public EmployeeController(EmployeeService employeeService) {
        this.employeeService = employeeService;
    }

    @PostMapping("/employees")
    public void saveEmployee(@RequestBody Employee employee) {
        employeeService.saveEmployee(employee);
    }
}

Salin selepas log masuk

Ujian JUnit dengan Mockito
EmployeeControllerTest.java

package com.example.demo.controller;

import com.example.demo.model.Employee;
import com.example.demo.service.EmployeeService;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import static org.mockito.Mockito.*;

class EmployeeControllerTest {

    @Mock
    private EmployeeService employeeService;

    @InjectMocks
    private EmployeeController employeeController;

    public EmployeeControllerTest() {
        MockitoAnnotations.openMocks(this); // Initialize mocks
    }

    @Test
    void testSaveEmployee() {
        // Arrange
        Employee employee = new Employee("1", "John Doe");

        // Act
        employeeController.saveEmployee(employee);

        // Assert
        // Verify that the saveEmployee method was called once with the correct argument
        verify(employeeService, times(1)).saveEmployee(employee);
    }
}

Salin selepas log masuk

Penjelasan

Mengejek dengan @Mock:

Perkhidmatan Pekerja diejek, bermakna tingkah lakunya boleh dikawal tanpa bergantung pada pelaksanaan sebenar.

Menyuntik Olok-olok dengan @InjectMocks:

EmployeeController menggunakan EmployeeService yang dipermainkan.

cara sahkan():

Mengesahkan bahawa kaedah saveEmployee() EmployeeService yang dipermainkan telah dipanggil tepat sekali dengan objek Pekerja yang ditentukan.

Memastikan kaedah itu digunakan sekali. Pilihan lain seperti never() atau atLeastOnce() boleh digunakan untuk keperluan pengesahan yang berbeza.

Mengapa verify() Berguna?

Memastikan Interaksi yang Dijangkakan: Mengesahkan logik yang diuji berinteraksi dengan komponen bergantung seperti yang dimaksudkan.

Menghalang Overcalls: Memastikan kaedah tidak dipanggil lebih daripada yang diperlukan, yang boleh menyerlahkan logik berlebihan atau tidak diingini.

Ujian Boleh Dibaca: Menyampaikan dengan jelas interaksi yang dijangkakan antara komponen.

Output untuk Ujian

Jika kaedah saveEmployee() dipanggil sekali, ujian akan lulus. Jika tidak, ia akan gagal dengan ralat penegasan, menunjukkan bahawa interaksi yang dijangkakan tidak berlaku.

Atas ialah kandungan terperinci kaedah pengesahan () dalam contoh Mockito. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan