20
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

エニプラAdvent Calendar 2024

Day 16

JUnitを用いた単体テストについて

Last updated at Posted at 2024-12-15

目的

本記事は私が学んだことについての備忘録です。
最近JUnit+MockKやJUnit+Mockitoを用いた単体テストの作成を行う機会が多かったため、
今回はそれらのテストについてまとめていきます。

アノテーション

JUnitのテストでよく見かけるアノテーションを紹介します。
以下の2つのアノテーションはMockK、Mockitoどちらでも同じように使用します。

Test

テストメソッドにつけるアノテーションです。
JUnitを用いる場合必ず見かけると思います。

fugaTest.java
@Test
void fugaTest() {
    // テスト内容
}
fugaTest.kt
@Test
fun fugaTest() {
    // テスト内容
}

Before

テストを開始する前に初期化しておきたい処理を行うメソッドにつけるアノテーションです。
このアノテーションを使用する場合、戻り値と引数を持たないメソッドであることが必要です。
メソッドの名前はsetUpであることが多い印象です。

fugaTest.java
@Before
void setUp() {
    // 初期化しておきたい処理
}
fugaTest.kt
@Before
fun setUp() {
    // 初期化しておきたい処理
}

MockK

名前の通りMockKで使用するアノテーションです。
モック化したい変数につけます。

fugaTest.kt
@MockK
private lateinit var value1: String

Mock

Mockitoで使用するアノテーションです。
MockKと同じくモック化したい変数につけます。

fugaTest.java
@Mock
private String value1;

アサーションとMatcher API

JUnitテストで見かけるアサーションとMatcherAPIの組み合わせを紹介します。

assertEquals

値が期待値通りの値か確認するアサーションです。
Equalsとある通り一致しているかどうかをチェックしているため、一致判定以外の判定を行いたい場合には向きません。
左側が期待値、右側が実測値です。

fugaTest.java
@Test
void fugaTest() {
    int value = 100;
    assertEquals(100, sum);
}

assertThat

値が期待値通りの値か確認するアサーションです。
assertEqualsと違い、左側が実測値、右側が期待値となります。

fugaTest.java
@Test
void fugaTest() {
    int value = 100;
    assertThat(sum, is(100));
}

モックインスタンスにパターンを設定する

題名の通りモックの振る舞いを定義するやり方について紹介します。

every {} returns

MockKで使用できます。
{}の中にスタブ化したいメソッドを記載し、returnsの後にメソッドが呼ばれた際に返したい値を設定します。
下のコードを例として挙げると、mode.getMode()が呼ばれた場合Mode.Testを返すという設定をしています。

fugaTest.kt
@MockK
private lateinit var mode: Mode

@Test
fun fugaTest() {
    every { mode.getMode() } returns Mode.Test
}

when().thenReturn()

Mockitoで使用できます。
everyと使用用途は同じで、when()の中にスタブ化したいメソッドを記載し、
thenReturn()の中にメソッドが呼ばれた際に返したい値を設定します。

fugaTest.java
@Mock
private Mode mode;

@Test
void fugaTest() {
    when(mode.getMode()).thenReturn(Mode.Test);
}

おわりに

備忘録なのでただただ自分用のメモを書き連ねたような簡単な記事ですが、
もし誰かのお役に立てれば幸いです。
最後まで閲覧いただきありがとうございました。🙇‍♀️

参考にさせていただいたサイト

MockKについて
Mockitoについて
JUnitについて1
JUnitについて2

20
2
2

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
20
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?