UTとは
1つのプログラムが期待通りに確認する作業のことです。
カバレッジ率とは
プログラムの処理の網羅率を言っています。すべての処理をカバーしている場合は100%になります。
カバレッジ率を100%にするには 条件分岐をすべてカバーする
if文の条件式に対して真のケースと偽のケースを用意する必要があります。
下記プログラムの①の条件式を全て満たすには、resultが100のケース(真)と100以外のケース(偽)が必要です。
②の条件式を全て満たすには、rseultが300または200のケース(真)と300と200以外のケース(偽)が必要です。
③には上記以外のケースが必要です。
int result = 100;
①if (result == 100) {
特定の処理を実行;
} ②else if(result == 300 || result ==200){
特定の処理を実行;
}③else {
特定の処理を実行;
}
条件式を満たすことができない場合があります。それは条件式が100と100以外の場合で以外がelseではなく、else ifで終わってしまっているケースです。
この場合、else ifの条件式を満たすには100以外(真)と100(偽)のケースが必要です。しかし、else ifの前で100の場合は真であるという条件式が用意されているため、else ifに届く値はすべて100以外のため、else ifの条件式を満たすことができないという事象が発生しています。そのため、if文を使用し、複数の条件式が存在する場合は可能な限りelseで閉じるようにしましょう。
JUnit
JUnitとは
JUnitを使用することで手軽に単体テストを実施することができ、カバレッジ率を確認できます。
JUnitを使用したUTの仕方について
①INPUTの設定
②テストしたい処理を流す
③期待値の確認
①では、まずCollectionやインスタンスに値を格納します
②では、確認したい処理をMockした状態で流します。
③アサーションで実施した処理の戻り値が期待値通りか確認します。
Mockとは
Mockを使用することで、確認したい対象物を疑似的に用意することができます.
Mockを使用しない場合、確認したいことができないためUTでは必要なものです。
Mockを使用する際は実施前に下記の入力することが必要です。
@ExtendWith(MockitoExtension.class)
Mockitoを使用することを宣言します。
@Mock
Mockしたいインスタンス等を定義します
@InjectMocks
@Mockで定義したインスタンス等が格納されるインスタンスを定義します。
期待値の確認
assertThatや例外処理の出力内容を確認したい場合はassertThrows、voidで戻り値がない場合はdoThrowなどを使用する。
whenやMockを使用をアサーションに含める場合は、模擬する範囲がきまっているため、範囲を考えながら行うことが必要です。
MyBatisが記載されている場合はカバレッジ率を把握できないケースがある
ローカル環境では確認できるが、それ以外の場所では確認できないというケースが発生することがある。そのため、ロジックを確認するためのUTとSQLを確認するためのUTを実施する必要が発生することがある。
MyBatisとは
インスタンスとRDBを紐づけるフレームワークの1つ。MyBatisによりDBから取得したデータをインスタンスに格納するなどできる。