0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

junit mockito 使い方

0
Last updated at Posted at 2025-12-01

JUnitとMockitoは、Javaプログラムの単体テストを効率的に行うためのフレームワークです。Mockitoは、テスト対象のクラスが依存している外部コンポーネント(他のクラスやDBなど)を模擬的なオブジェクト(モック)に置き換えるために使用されます。
基本的な使い方を以下に解説します。

  1. 依存関係の追加
    Mavenプロジェクトの場合、pom.xmlに以下の依存関係を追加します:
    xml
org.junit.jupiter junit-jupiter-api 5.x.x test org.junit.jupiter junit-jupiter-engine 5.x.x test org.mockito mockito-core 4.x.x test org.mockito mockito-junit-jupiter 4.x.x test コードは注意してご使用ください。
  1. サンプルコード
    ここでは、UserServiceがUserRepositoryに依存しているというシナリオを想定します。
    java
    // 依存先のインターフェース
    public interface UserRepository {
    String findUserNameById(int id);
    }

// テスト対象のクラス
public class UserService {
private final UserRepository userRepository;

public UserService(UserRepository userRepository) {
    this.userRepository = userRepository;
}

public String getUserInfo(int id) {
    String name = userRepository.findUserNameById(id);
    if (name != null) {
        return "User: " + name;
    }
    return "User not found";
}

}
コードは注意してご使用ください。

  1. テストコードの書き方
    Mockitoを使ってUserRepositoryのモックを作成し、UserServiceのテストを行います。
    java
    import static org.junit.jupiter.api.Assertions.assertEquals;
    import static org.mockito.Mockito.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

public class UserServiceTest {

@Mock
private UserRepository userRepository; // モックオブジェクト

@InjectMocks
private UserService userService; // テスト対象クラスにモックを注入

@BeforeEach
public void setUp() {
    // Mockitoのアノテーションを初期化
    MockitoAnnotations.openMocks(this);
}

@Test
public void testGetUserInfo_UserFound() {
    int userId = 1;
    String expectedName = "John Doe";

    // モックの振る舞いを設定
    // "findUserNameById(1)"が呼ばれたら、"John Doe"を返すように設定
    when(userRepository.findUserNameById(userId)).thenReturn(expectedName);

    // テスト対象のメソッドを実行
    String result = userService.getUserInfo(userId);

    // 結果を検証
    assertEquals("User: John Doe", result);

    // userRepositoryのfindUserNameByIdメソッドが1回呼ばれたことを検証
    verify(userRepository, times(1)).findUserNameById(userId);
}

@Test
public void testGetUserInfo_UserNotFound() {
    int userId = 2;

    // "findUserNameById(2)"が呼ばれたら、nullを返すように設定
    when(userRepository.findUserNameById(userId)).thenReturn(null);

    // テスト対象のメソッドを実行
    String result = userService.getUserInfo(userId);

    // 結果を検証
    assertEquals("User not found", result);

    // userRepositoryのfindUserNameByIdメソッドが1回呼ばれたことを検証
    verify(userRepository, times(1)).findUserNameById(userId);
}

}
コードは注意してご使用ください。

主要なMockitoメソッド
mock() / @Mock: モックオブジェクトを作成します。
when(...).thenReturn(...): 特定のメソッドが呼ばれたときに返す値を設定します(スタブ化)。
verify(...): モックオブジェクトの特定のメソッドが、期待通りに呼び出されたかどうかを検証します。
doThrow(...).when(...): void型のメソッドが呼ばれたときに例外をスローするように設定します。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?