見出し画像

【Javaお勉強日記】JUnitを使ってテストを自動化する・基礎の基礎編

テストのやり方、一回確認したのに綺麗さっぱり忘れていたので覚え書きです。

前提条件

・VScodeでJavaが動かせるようになっている

・ビルドツールにはGradleを使う

インストールするもの

VScodeのエクステンション

build.gradleに追記

testImplementation group: 'junit', name: 'junit', version: '4.4'

必要に応じてJUnit5にする。その際はまた調べる。

テストコードを書くところまで

1・SpringInitializrを使って新規プロジェクトを作る
(とりあえず動かしてみるだけなら新しいフォルダ作るだけでもいいけど、mainフォルダとtestフォルダ作ってうんぬんかんぬん考えるよりイニシャライザ使う方が楽)

2・mainフォルダの中身に適当なクラス「mainFolderNoClass.java」を作って何か処理を書く

3・testフォルダの中に、「mainFolderNoClassTest.java」を作ってテストを書く

テストコードの書き方

package com.example.testsample;

// この辺のは、build.gradleにJUnitを追加しておけば使える
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.*;
import org.junit.jupiter.api.Test;

public class ScoreCollectionTest{
   @Test
   public void answersArithmeticMeanOfTwoNumbers(){
       // 二つの数字の平均を返すメソッドに対するテスト
       // 準備する
       ScoreCollection collection = new ScoreCollection();
       collection.add(() -> 5);
       collection.add(() -> 10);
       
       // 実行する
       int actualResult = collection.arithmeticMean();
       
       // 結果を確かめる
       assertThat(actualResult, equalTo(6));
   }
}

テストを個別に実行する

パッケージとインポート、あとテストの内容が正しく設定されていれば、hogeTest.javaのクラス名の所やメソッド名のところに

画像1

これが表示されるので、「RunTest」をクリック

テストの結果を確認する

成功したら

画像3

この、一番右側の「✓」が表示される

失敗したら

画像2

これが表示される

ナイスなテストの書き方

・メソッド名はちょっと増長でも「何をしたら、どうなる(はず)」という名前を付ける
「残高以上を引き出そうとしたら例外が発生する」「二回残高を追加したら合計金額分残高が増える」など。
「残高を追加する」「残高以上を引き出す」だけだと、どういう結果になればテスト成功なのか分からない。

・「メソッド」をテストするのではなく「ふるまい」をテストする
メソッドそのものをテストしようとすると、必要なケースを洗い出せなかったり、テストするまでもないクラスに対して愚直すぎるテストを書いてしまったりするので、「そのメソッドを使って何が行われるのか」に注目してテストを書く。
例えば、「会員情報を編集する」クラスに、「登録」「更新」「表示(Getter)」メソッドが置いてあったとして、内部の変数をそのまま返すだけのGetterメソッドに対して「表示出来る?」「出来たよ」というテストを書く必要はない。「更新結果が正しく反映されているか表示する」のような、実際の運用に即した形でテストする。(Getter作るな、という話は今は横に置いておく)

・「AAA(Arrange-Act-Assert:準備-実行-確認)」の構造で書く
テストするクラスのインスタンスを作ったり、必要な値を渡したりするArrange(準備)のターン
処理を実行するAct(実行)のターン
処理結果が期待通りかを検証するAssert(確認)のターン
という構造を意識してコードを書き、それぞれ段落を使ってブロックに分けて書くことでコードの見通しをよくする。


この記事が気に入ったらサポートをしてみませんか?