Senario: Mengejek Perkhidmatan untuk Menguji Pengawal
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; } }
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"); } }
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); } }
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"); } }
Penjelasan
bila().thenReturn():
Mengejek kelakuan employeeService.getEmployeeById("1") untuk mengembalikan objek Pekerja tertentu apabila dipanggil dengan "1".
Suntikan Ketergantungan:
@Mock mencipta olok-olok terhadap EmployeeService.
@InjectMocks menyuntik olok-olok EmployeeService ke dalam EmployeeController.
Sahkan:
verify(employeeService, times(1)).getEmployeeById("1") memastikan kaedah yang dipermainkan dipanggil sekali sahaja.
Penegasan:
Mengesahkan objek Pekerja yang dikembalikan terhadap nilai yang dijangkakan.
Output
Apabila ujian dilaksanakan:
Ia akan memanggil kaedah pengawal.
Perkhidmatan yang dipermainkan akan mengembalikan objek Pekerja yang ditikam.
Ujian akan lulus jika:
Objek Pekerja yang dikembalikan sepadan dengan nilai yang dijangkakan.
Kaedah perkhidmatan yang diejek telah dipanggil bilangan kali yang dijangkakan.
Ini ialah cara yang bersih dan praktikal untuk menggunakan thenReturn() dalam aplikasi Spring Boot untuk menguji logik pengawal tanpa bergantung pada pelaksanaan perkhidmatan sebenar.
Atas ialah kandungan terperinci kaedah thenReturn() dalam contoh Mockito. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!