Heim > Java > javaLernprogramm > Methode „Verify()' im Mockito-Beispiel

Methode „Verify()' im Mockito-Beispiel

Barbara Streisand
Freigeben: 2025-01-12 18:04:44
Original
666 Leute haben es durchsucht

Die Methode „Verify()“ in Mockito wird verwendet, um zu bestätigen, dass bestimmte Interaktionen mit simulierten Objekten stattgefunden haben. Dies ist besonders nützlich beim Testen, wenn Sie sicherstellen möchten, dass eine bestimmte Methode während der Ausführung Ihres Codes mit bestimmten Argumenten aufgerufen wurde.

Unten ist ein Beispiel einer Spring Boot-Anwendung mit einer Service- und Controller-Schicht, bei der die Methode „Verify()“ in einem Test verwendet wird.

Erstellen Sie ein Spring Boot Starter-Projekt mit Spring Web-Abhängigkeit und führen Sie das folgende Beispiel aus

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>

Nach dem Login kopieren

Spring Boot-Anwendung
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;
    }
}

Nach dem Login kopieren

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());
    }
}

Nach dem Login kopieren

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);
    }
}

Nach dem Login kopieren

JUnit-Test mit 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);
    }
}

Nach dem Login kopieren

Erklärung

Verspotten mit @Mock:

Der EmployeeService wird verspottet, was bedeutet, dass sein Verhalten gesteuert werden kann, ohne auf die tatsächliche Implementierung angewiesen zu sein.

Mocks mit @InjectMocks injizieren:

Der EmployeeController verwendet den simulierten EmployeeService.

verify() Methode:

Bestätigt, dass die saveEmployee()-Methode des simulierten EmployeeService genau einmal mit dem angegebenen Employee-Objekt aufgerufen wurde.

Stellt sicher, dass die Methode einmal aufgerufen wurde. Andere Optionen wie never() oder atLeastOnce() können für unterschiedliche Verifizierungsanforderungen verwendet werden.

Warum ist verify() nützlich?

Stellt erwartete Interaktionen sicher: Bestätigt, dass die getestete Logik wie beabsichtigt mit abhängigen Komponenten interagiert.

Verhindert Überaufrufe: Stellt sicher, dass Methoden nicht öfter als nötig aufgerufen werden, was auf redundante oder unerwünschte Logik hinweisen kann.

Lesbare Tests: Kommuniziert klar die erwarteten Wechselwirkungen zwischen Komponenten.

Ausgabe für den Test

Wenn die Methode saveEmployee() einmal aufgerufen wird, ist der Test bestanden. Andernfalls schlägt der Vorgang mit einem Assertionsfehler fehl und zeigt an, dass die erwartete Interaktion nicht stattgefunden hat.

Das obige ist der detaillierte Inhalt vonMethode „Verify()' im Mockito-Beispiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage