チャットbotお試し用アプリ開発_8.5日目


# 目次

・本日の成果・考え
・最後に

### 本日の成果
前回テストを実施したAppSettingFactoryですが、UTやり直しが必要となりました。

経緯としては以下のとおりです。

* SettingLoaderクラスのPGを実行する中で、このクラスの役割を「1、設定ファイルの読み込み　2、設定ファイルの値を取り出してcreateInstanceメソッドを呼び出す。」と設定する。
* 設定ファイルから値を取り出すタイミングでNullや空白チェックを行う必要があるよね？と気づく。
* 前回のAppSettingFactoryクラスでNullや空白チェックを行うと2回同じ処理を行うことになり無駄。先に実行されるSettingLoaderでチェックを行えば済む。
::: note warn
というか、Factoryの責任って「インスタンスの生成と取り出し」だから、設定値（メソッドの引数）が正しいかどうかを判別する責任をもたせるべきではないと気づきました。

:::

はい、つまりやり直しです。

前回のパターンのうちNull・空白チェックなどを除外し、以下のパターンとしました。

①正常系：正しく生成して取り出せる（既存）
②異常系：生成せずに取り出そうとしてエラー（既存）
③正常系：生成処理を2回実行すると、上書きとなる。（追加）

以下、修正したテストソースです。

``` AppSettingFactoryTest.java
	//　パターン③：正常系　2回生成すると上書きになる。
	@Test
	public void test3() {
		String className = new Object() {
		}.getClass().getName();
		String resultOutopu = className + "のテストパターン3";

		AppSettingFactory test3 = new AppSettingFactory();

		try {
			out.println("**********************************************");
			out.println(resultOutopu + "が開始されました。");

			out.println("1回目が開始されました。");
			testlog = "テスト";
			testlogFile = "テスト";
			testTitle = "テスト";
			testwindUrl = "テスト";
			testwindWidth = 30;
			testwindHeight = 30;
			test3.createInstance(testlog, testlogFile, testTitle, testwindUrl, testwindWidth, testwindHeight);
			AppSettingDto testValue = test3.getInstance();

			assertEquals("テスト", testValue.getLogPass());
			assertEquals("テスト", testValue.getLogFileExtensionString());
			assertEquals("テスト", testValue.getTitle());
			assertEquals("テスト", testValue.getWindUrl());
			assertEquals(30, testValue.getWindWidth());
			assertEquals(30, testValue.getWindHeight());

			out.println("logPass: " + testValue.getLogPass());
			out.println("logFileExtension: " + testValue.getLogFileExtensionString());
			out.println("title: " + testValue.getTitle());
			out.println("windUrl: " + testValue.getWindUrl());
			out.println("windWidth: " + testValue.getWindWidth());
			out.println("windHeight: " + testValue.getWindHeight());

			out.println("2回目が開始されました。");
			testlog = "テスト2";
			testlogFile = "テスト2";
			testTitle = "テスト2";
			testwindUrl = "テスト2";
			testwindWidth = 40;
			testwindHeight = 40;
			
			test3.createInstance(testlog, testlogFile, testTitle, testwindUrl, testwindWidth, testwindHeight);
			testValue = test3.getInstance();
			assertEquals("テスト2", testValue.getLogFileExtensionString());
			assertEquals("テスト2", testValue.getTitle());
			assertEquals("テスト2", testValue.getWindUrl());
			assertEquals(40, testValue.getWindWidth());
			assertEquals(40, testValue.getWindHeight());

			out.println("logPass: " + testValue.getLogPass());
			out.println("logFileExtension: " + testValue.getLogFileExtensionString());
			out.println("title: " + testValue.getTitle());
			out.println("windUrl: " + testValue.getWindUrl());
			out.println("windWidth: " + testValue.getWindWidth());
			out.println("windHeight: " + testValue.getWindHeight());

		} catch (Exception e) {
			// TODO: handle exception
			String resultError = String.format("エラーが発生しました。内容は{%s}", e);
			out.println(resultError);
		} finally {
			out.println(resultOutopu + "が終了しました。");
			out.println("**********************************************");
		}
	}
```
まあ見ていただいた通り、2回生成してしっかりと上書きになっているかを出力するだけの処理です。

実行結果

![スクリーンショット 2025-06-20 20.32.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3338426/7d2bcfa8-dc3a-4085-87c1-7de8630dad99.png)


### 最後に
本当に、後の工程に進むほど、前の工程の設計の甘さに気づきます。
今回の反省としては、クラス図の作成段階で、各クラスのクラスとしての処理の責任分離をしっかりと設計できていなかった点だと思います。
大まかにしかクラスの処理の責任を考えていなかったため、実際にPGしてみて責任を複数持っていたり、Factoryのクラスにロジック的な内容を記述してしまう羽目となりました。

今日の作業は流石にこれだけでは、終われませんので、LoaderクラスのPGを完了しておきました。次回は、Loaderクラスで読み込む設定ファイルの作成とUTになります。