> Java > java지도 시간 > Mockito 예제의 verify() 메서드

Mockito 예제의 verify() 메서드

Barbara Streisand
풀어 주다: 2025-01-12 18:04:44
원래의
714명이 탐색했습니다.

Mockito의 verify() 메서드는 모의 개체와의 특정 상호 작용이 발생했는지 확인하는 데 사용됩니다. 이는 코드 실행 중에 특정 인수를 사용하여 특정 메소드가 호출되었는지 확인하려는 경우 테스트에 특히 유용합니다.

다음은 서비스 및 컨트롤러 계층이 있는 Spring Boot 애플리케이션의 예입니다. 여기서 verify() 메서드가 테스트에 사용됩니다.

Spring Web 종속성을 사용하여 Spring Boot Starter 프로젝트를 생성하고 아래 예제를 실행합니다

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>

로그인 후 복사

스프링 부트 애플리케이션
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;
    }
}

로그인 후 복사

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

로그인 후 복사

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

로그인 후 복사

Mockito를 사용한 JUnit 테스트
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);
    }
}

로그인 후 복사

설명

@Mock으로 조롱:

EmployeeService는 실제 구현에 의존하지 않고도 해당 동작을 제어할 수 있다는 의미입니다.

@InjectMocks를 사용하여 모의 객체 삽입:

EmployeeController는 모의 EmployeeService를 사용합니다.

verify() 메서드:

모의 EmployeeService의 saveEmployee() 메서드가 지정된 Employee 객체를 사용하여 정확히 한 번 호출되었는지 확인합니다.

메서드가 한 번 호출되었는지 확인합니다. never() 또는 atLeastOnce()와 같은 다른 옵션은 다양한 확인 요구에 사용될 수 있습니다.

verify()가 왜 유용한가요?

예상되는 상호 작용 보장: 테스트된 논리가 의도한 대로 종속 구성 요소와 상호 작용하는지 확인합니다.

오버콜 방지: 메소드가 필요 이상으로 호출되지 않도록 하여 중복되거나 원치 않는 로직을 강조 표시할 수 있습니다.

읽기 쉬운 테스트: 구성 요소 간에 예상되는 상호 작용을 명확하게 전달합니다.

테스트 출력

saveEmployee() 메소드가 한 번 호출되면 테스트가 통과됩니다. 그렇지 않으면 예상한 상호 작용이 발생하지 않았음을 나타내는 어설션 오류와 함께 실패합니다.

위 내용은 Mockito 예제의 verify() 메서드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿