diff --git a/ecs/crm-datafetch/.env.example b/ecs/crm-datafetch/.env.example
new file mode 100644
index 00000000..aa6a3d18
--- /dev/null
+++ b/ecs/crm-datafetch/.env.example
@@ -0,0 +1,17 @@
+CRM_AUTH_DOMAIN=test
+CRM_USER_NAME=test
+CRM_USER_PASSWORD=test
+CRM_USER_SECURITY_TOKEN=test
+CRM_CONFIG_BUCKET=test
+CRM_BACKUP_BUCKET=test
+IMPORT_DATA_BUCKET=test
+OBJECT_INFO_FOLDER=test
+OBJECT_INFO_FILENAME=test
+PROCESS_RESULT_FOLDER=test
+PROCESS_RESULT_FILENAME=test
+LAST_FETCH_DATE_FOLDER=test
+CRM_IMPORT_DATA_FOLDER=test
+LAST_FETCH_DATE_BACKUP_FOLDER=test
+RESPONSE_JSON_BACKUP_FOLDER=test
+CRM_IMPORT_DATA_BACKUP_FOLDER=test
+TZ=Asia/Tokyo
diff --git a/ecs/crm-datafetch/.vscode/python.code-snippets b/ecs/crm-datafetch/.vscode/python.code-snippets
index 9f01c623..aa7b3501 100644
--- a/ecs/crm-datafetch/.vscode/python.code-snippets
+++ b/ecs/crm-datafetch/.vscode/python.code-snippets
@@ -12,6 +12,6 @@
" $3",
"\"\"\""
],
- "description": "Test docstring (User Snipets)"
+ "description": "Test docstring (User Snippets)"
}
}
diff --git a/ecs/crm-datafetch/README.md b/ecs/crm-datafetch/README.md
index 5a23e966..f0188f5f 100644
--- a/ecs/crm-datafetch/README.md
+++ b/ecs/crm-datafetch/README.md
@@ -67,3 +67,75 @@
- 環境変数が必要な場合、直接設定するか、上記JSONの`"envFile"`に設定されたパスに`.env`ファイルを作成し、環境変数を入力する
- キーボードの「F5」キーを押して起動する
- デバッグモードで実行されるため、適当なところにブレークポイントを置いてデバッグすることができる
+
+## 単体テストについて
+
+### 前提
+
+- Pytestを使用する
+ -
+- カバレッジも取得したいため、pytest-covも使う
+ -
+- レポートを出力するため、pytest-htmlを使う
+ -
+- S3をモック化したいため、motoをつかう
+ -
+- CRMはテスト用の環境を使いたいため、newdwh_opeのアドレスでDeveloper組織を登録する
+
+### テスト環境構築
+
+- Pipenvの仮想環境下で、以下のコマンドを実行する
+
+```sh
+pipenv install --dev
+```
+
+- `.env.example`をコピーし、同じ階層に`.env`を作成する
+- `.env`の以下に示す環境変数の値をDeveloper組織のものに書き換える
+ - CRM_AUTH_DOMAIN
+ - CRM_USER_NAME
+ - CRM_USER_PASSWORD
+ - CRM_USER_SECURITY_TOKEN
+- 以下のコマンドを実行して単体テストを起動する
+
+```sh
+pipenv run test:cov
+```
+
+#### 各コマンドの説明
+
+- `pipenv run test`
+ - pytestを使用してテストを実行する
+ - `tests`フォルダに配置されているテストモジュールを対象に、単体テストを実行する
+- `pipenv run test:cov`
+ - pytestのテスト終了時にカバレッジを収集する
+ - 標準出力とカバレッジファイル(`.coverage`)に出力される
+- `pipenv run test:report`
+ - pytestのテスト終了時にテスト結果をHTMLで出力する
+ - `.report/test_result.html`が出力される
+
+## 単体テストの追加方法
+
+- `tests`フォルダ内に、`src`フォルダの構成と同じようにフォルダを作り、`test_<テスト対象のモジュール名.py>`というファイルを作成する
+ - 例:`src/aws/s3.py`をテストする場合は`tests/aws/test_s3.py`というファイル名にする
+- テスト関数はクラスにまとめて、テストスイートとする
+- テスト関数にはドキュメントコメントを付け、テスト観点・準備作業・期待値を記載すること
+ - 上記が出力されるスニペットを用意してある。
+ - `""""""`と入力し、「Test docstring (User Snippets)」を選択し、ドキュメントコメントを挿入できる
+
+```python
+
+from src.aws.s3 import S3Resource
+class TestS3Resource:
+ def test_get_object(self, s3_test, s3_):
+ """
+ Cases:
+ S3からオブジェクトが取得できるか
+ Arranges:
+ - S3をモック化する
+ - 期待値となるファイルを配置する
+ Expects:
+ オブジェクトが取得でき、期待値と正しいこと
+ """
+ # more code...
+```