目次
・本日の成果・考え
・最後に
本日の成果
共通関数のテストからやっていきました。
package test;
import static java.lang.System.*;
import org.junit.Test;
import util.CommonFunction;
public class CommonFunctionTest {
//テストパターン 正常系 引数一つ
@Test
public void test1_1() {
String className = new Object() {
}.getClass().getName();
String resultOutput = className + "のテストパターン1_1";
try {
out.println("**********************************************");
out.println(resultOutput + "が開始されました。");
CommonFunction.checkNullBlank("テスト");
out.println(resultOutput + "が正常終了しました。");
} catch (Exception e) {
// TODO: handle exception
String resultError = String.format("エラーが発生しました。内容は{%s}", e);
out.println(resultError);
} finally {
out.println(resultOutput + "が終了しました。");
out.println("**********************************************");
}
}
//テストパターン 正常系 引数複数 *10
@Test
public void test1_2() {
String className = new Object() {
}.getClass().getName();
String resultOutput = className + "のテストパターン1_2";
try {
out.println("**********************************************");
out.println(resultOutput + "が開始されました。");
CommonFunction.checkNullBlank("テスト","テスト","テスト","テスト","テスト","テスト","テスト","テスト","テスト","テスト");
out.println(resultOutput + "が正常終了しました。");
} catch (Exception e) {
// TODO: handle exception
String resultError = String.format("エラーが発生しました。内容は{%s}", e);
out.println(resultError);
} finally {
out.println(resultOutput + "が終了しました。");
out.println("**********************************************");
}
}
//テストパターン Nullを最初に含む。
@Test
public void test2() {
String className = new Object() {
}.getClass().getName();
String resultOutput = className + "のテストパターン2";
try {
out.println("**********************************************");
out.println(resultOutput + "が開始されました。");
CommonFunction.checkNullBlank(null,"テスト","テスト","テスト");
out.println(resultOutput + "が正常終了しました。");
} catch (Exception e) {
// TODO: handle exception
String resultError = String.format("エラーが発生しました。内容は{%s}", e);
out.println(resultError);
} finally {
out.println(resultOutput + "が終了しました。");
out.println("**********************************************");
}
}
//テストパターン 空白(半角)を最初に含む。
@Test
public void test3_1() {
String className = new Object() {
}.getClass().getName();
String resultOutput = className + "のテストパターン3_1";
try {
out.println("**********************************************");
out.println(resultOutput + "が開始されました。");
CommonFunction.checkNullBlank(" ","テスト","テスト","テスト");
out.println(resultOutput + "が正常終了しました。");
} catch (Exception e) {
// TODO: handle exception
String resultError = String.format("エラーが発生しました。内容は{%s}", e);
out.println(resultError);
} finally {
out.println(resultOutput + "が終了しました。");
out.println("**********************************************");
}
}
//テストパターン 空白(全角)を最初に含む。
@Test
public void test3_2() {
String className = new Object() {
}.getClass().getName();
String resultOutput = className + "のテストパターン3_2";
try {
out.println("**********************************************");
out.println(resultOutput + "が開始されました。");
CommonFunction.checkNullBlank(" ","テスト","テスト","テスト");
out.println(resultOutput + "が正常終了しました。");
} catch (Exception e) {
// TODO: handle exception
String resultError = String.format("エラーが発生しました。内容は{%s}", e);
out.println(resultError);
} finally {
out.println(resultOutput + "が終了しました。");
out.println("**********************************************");
}
}
//テストパターン Nullまたは空白を途中に含む。
@Test
public void test4() {
String className = new Object() {
}.getClass().getName();
String resultOutput = className + "のテストパターン4";
try {
out.println("**********************************************");
out.println(resultOutput + "が開始されました。");
CommonFunction.checkNullBlank("テスト",null,"テスト","テスト");
out.println(resultOutput + "が正常終了しました。");
} catch (Exception e) {
// TODO: handle exception
String resultError = String.format("エラーが発生しました。内容は{%s}", e);
out.println(resultError);
} finally {
out.println(resultOutput + "が終了しました。");
out.println("**********************************************");
}
}
}
コメントにテストパターンを記述しています。
第2引数以降のパターンで、null、空白の半角、全角の全てを試す必要はないと思い、一つだけテストしました。
また、引数に制限を設けていないので0(null)、1、1以上でテストしました。
では、テスト実行
テスト結果
少し、画像が小さくて申し訳ありませんが、Nullの場合エラーの文が用意しているものと違うみたいです。
原因は、チェック関数の以下の部分でした。
for(int i = 0;i<checkNum; i++) {
if(checkStrings[i]==null) {
errorMessage.append("項目のうち").append(i).append("番目がnullです\n");
//ここのIFがTrueでも、次のIFを実行してしまっていました。
}
if(checkStrings[i].isBlank()) {
errorMessage.append("項目のうち").append(i).append("番目が空白です\n");
}
以下のように修正しました。
for(int i = 0;i<checkNum; i++) {
if(checkStrings[i]==null) {
errorMessage.append("項目のうち").append(i).append("番目がnullです\n");
continue;
//ここでストップして、次の引数をチェックしに行く。
}
if(checkStrings[i].isBlank()) {
errorMessage.append("項目のうち").append(i).append("番目が空白です\n");
continue;
}
では、再度テスト実行。
テストも全てのパターンが正常終了または用意しているエラーとなり、
想定通りの結果でした。
では、ようやくFactoryクラスのUTを実行します。
実行結果
どうしてか失敗しているなと思ったら、異常系のテストのエラーキャッチの処理の中にfail処理が入っていました。
したの箇所です。
catch (Exception e) {
String resultError = String.format("エラーが発生しました。内容は{%s}", e);
out.println(resultError);
e.printStackTrace();
fail("テストパターン1失敗。");
では、修正してもう一度
想定通りの結果となり、AppSettingDtoFatoryのクラスの単体テストが完了しました。
最後に
ようやく一つ目のPGおよび単体テストが完了しました。
次は、設定ファイルである.propertiesを読み込んでAppSettingDtoFactoryのメソッドを呼び出すLoaderクラスのPG・UTに取り掛かりたいと思います。
今日の振り返りとしては、ログではりませんが、エラーの内容を出力するようにソースを組んでいるので、今のところエラーをすぐに対処できています。
ここまでお付き合いありがとうございました。