ホームページ > Java > &#&チュートリアル > Mockito の例の verify() メソッド

Mockito の例の verify() メソッド

Barbara Streisand
リリース: 2025-01-12 18:04:44
オリジナル
667 人が閲覧しました

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>

ログイン後にコピー

Spring Boot アプリケーション
従業員.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 オブジェクトで正確に 1 回呼び出されたことを確認します。

メソッドが 1 回呼び出されたことを確認します。 Never() や atLeastOnce() などの他のオプションは、さまざまな検証ニーズに使用できます。

verify() はなぜ便利ですか?

期待される相互作用を保証: テストされたロジックが意図したとおりに依存コンポーネントと相互作用することを確認します。

オーバーコールの防止: メソッドが必要以上に呼び出されないようにします。これにより、冗長または不要なロジックが強調表示される可能性があります。

読みやすいテスト: コンポーネント間で予想される相互作用を明確に伝えます。

テストの出力

saveEmployee() メソッドが 1 回呼び出されると、テストは成功します。それ以外の場合は、アサーション エラーで失敗し、予期した対話が発生しなかったことを示します。

以上がMockito の例の verify() メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート