0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JUnit5 + MockitoでCalendar.getInstance()をモックする

Posted at

概要

JUnit5とMockitoを使った、Calendar.getInstance()のモックの仕方について、
日本語/英語両方で調べてもなかなかヒットしなかったので記事化&サンプル用のソースを書いておきました。

1. pom.xmlを修正する

1-1. <properties></properties>配下に下記を追加します。

<mockito.version>4.11.0</mockito.version>

1-2. <dependencies></dependencies>の中に下記を入れます。

    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <version>${mockito.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-inline</artifactId>
      <version>${mockito.version}</version>
      <scope>test</scope>
    </dependency>

2. 実際にテストコードを記載する

実装コード

package com.example;

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class DateGetter {
  public String get() {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    return sdf.format(Calendar.getInstance().getTime());
  }
}

テスト用のコード

package com.example;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.mockStatic;

import java.util.Calendar;
import java.util.GregorianCalendar;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.MockedStatic;
import org.mockito.Mockito;

public class DateGetterTest {
  @DisplayName("Calendar.getInstance()をモックするテストだよ")
  @Test
  void testGet() {
    Calendar cal = new GregorianCalendar(2023, 1, 26, 11, 12, 13);
    try (MockedStatic<Calendar> mockedCalendar = mockStatic(Calendar.class, Mockito.CALLS_REAL_METHODS)) {
      // Arrange
      mockedCalendar.when(() -> Calendar.getInstance()).thenReturn(cal);
      // Act
      String result = new DateGetter().get();
      // Assert
      assertEquals("20230226111213", result, "日時の期待値と結果が間違ってるよ。");
    }
  }
}

実行結果キャプチャ

(左ペイン:実装)(右ペイン:テスト)で、テスト通ったことを確認しました。
image.png

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?