Heim > Java > javaLernprogramm > thenReturn()-Methode im Mockito-Beispiel

thenReturn()-Methode im Mockito-Beispiel

Mary-Kate Olsen
Freigeben: 2025-01-27 00:07:07
Original
925 Leute haben es durchsucht

thenReturn() method in Mockito example

Szenario: Verspotten eines Dienstes zum Testen eines Controllers

  1. Anwendungscode Employee.java
package com.example.demo.model;

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

    // Constructors, 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 Employee getEmployeeById(String id) {
        // Simulate fetching employee from a database
        return new Employee(id, "Default Name");
    }
}

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.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class EmployeeController {
    private final EmployeeService employeeService;

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

    @GetMapping("/employees/{id}")
    public Employee getEmployee(@PathVariable String id) {
        return employeeService.getEmployeeById(id);
    }
}

Nach dem Login kopieren
  1. Unit-Testcode mit thenReturn() 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.*;
import static org.junit.jupiter.api.Assertions.*;

class EmployeeControllerTest {

    @Mock
    private EmployeeService employeeService;

    @InjectMocks
    private EmployeeController employeeController;

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

    @Test
    void testGetEmployee() {
        // Arrange: Use when().thenReturn() to mock service behavior
        when(employeeService.getEmployeeById("1")).thenReturn(new Employee("1", "John Doe"));

        // Act: Call the controller method
        Employee employee = employeeController.getEmployee("1");

        // Assert: Verify the returned object
        assertNotNull(employee);
        assertEquals("1", employee.getId());
        assertEquals("John Doe", employee.getName());

        // Verify the mocked service was called
        verify(employeeService, times(1)).getEmployeeById("1");
    }
}

Nach dem Login kopieren

Erklärung
when().thenReturn():

Verspottet das Verhalten von EmployeeService.getEmployeeById("1"), um ein bestimmtes Employee-Objekt zurückzugeben, wenn es mit "1" aufgerufen wird.
Abhängigkeitsinjektion:

@Mock erstellt eine Nachbildung des EmployeeService.

@InjectMocks injiziert den simulierten EmployeeService in den EmployeeController.

Überprüfen:
verify(employeeService, times(1)).getEmployeeById("1") stellt sicher, dass die simulierte Methode genau einmal aufgerufen wurde.

Behauptung:
Validiert das zurückgegebene Employee-Objekt anhand der erwarteten Werte.

Ausgabe
Wenn der Test ausgeführt wird:

Es wird die Controller-Methode aufgerufen.

Der simulierte Dienst gibt das Stub-Employee-Objekt zurück.
Der Test wird bestanden, wenn:
Das zurückgegebene Employee-Objekt entspricht den erwarteten Werten.

Die simulierte Servicemethode wurde mit der erwarteten Häufigkeit aufgerufen.

Dies ist eine saubere, praktische Möglichkeit, thenReturn() in einer Spring Boot-Anwendung zu verwenden, um die Controller-Logik zu testen, ohne sich auf die tatsächliche Service-Implementierung zu verlassen.

Das obige ist der detaillierte Inhalt vonthenReturn()-Methode 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