目的
本記事は私が学んだことについての備忘録です。
最近JUnit+MockKやJUnit+Mockitoを用いた単体テストの作成を行う機会が多かったため、
今回はそれらのテストについてまとめていきます。
アノテーション
JUnitのテストでよく見かけるアノテーションを紹介します。
以下の2つのアノテーションはMockK、Mockitoどちらでも同じように使用します。
Test
テストメソッドにつけるアノテーションです。
JUnitを用いる場合必ず見かけると思います。
@Test
void fugaTest() {
// テスト内容
}
@Test
fun fugaTest() {
// テスト内容
}
Before
テストを開始する前に初期化しておきたい処理を行うメソッドにつけるアノテーションです。
このアノテーションを使用する場合、戻り値と引数を持たないメソッドであることが必要です。
メソッドの名前はsetUpであることが多い印象です。
@Before
void setUp() {
// 初期化しておきたい処理
}
@Before
fun setUp() {
// 初期化しておきたい処理
}
MockK
名前の通りMockKで使用するアノテーションです。
モック化したい変数につけます。
@MockK
private lateinit var value1: String
Mock
Mockitoで使用するアノテーションです。
MockKと同じくモック化したい変数につけます。
@Mock
private String value1;
アサーションとMatcher API
JUnitテストで見かけるアサーションとMatcherAPIの組み合わせを紹介します。
assertEquals
値が期待値通りの値か確認するアサーションです。
Equalsとある通り一致しているかどうかをチェックしているため、一致判定以外の判定を行いたい場合には向きません。
左側が期待値、右側が実測値です。
@Test
void fugaTest() {
int value = 100;
assertEquals(100, sum);
}
assertThat
値が期待値通りの値か確認するアサーションです。
assertEqualsと違い、左側が実測値、右側が期待値となります。
@Test
void fugaTest() {
int value = 100;
assertThat(sum, is(100));
}
モックインスタンスにパターンを設定する
題名の通りモックの振る舞いを定義するやり方について紹介します。
every {} returns
MockKで使用できます。
{}の中にスタブ化したいメソッドを記載し、returnsの後にメソッドが呼ばれた際に返したい値を設定します。
下のコードを例として挙げると、mode.getMode()が呼ばれた場合Mode.Testを返すという設定をしています。
@MockK
private lateinit var mode: Mode
@Test
fun fugaTest() {
every { mode.getMode() } returns Mode.Test
}
when().thenReturn()
Mockitoで使用できます。
everyと使用用途は同じで、when()の中にスタブ化したいメソッドを記載し、
thenReturn()の中にメソッドが呼ばれた際に返したい値を設定します。
@Mock
private Mode mode;
@Test
void fugaTest() {
when(mode.getMode()).thenReturn(Mode.Test);
}
おわりに
備忘録なのでただただ自分用のメモを書き連ねたような簡単な記事ですが、
もし誰かのお役に立てれば幸いです。
最後まで閲覧いただきありがとうございました。🙇♀️