From 96326b1a463163fbbbd79b07a6c3d17a3b09b86c Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 2 Aug 2022 15:32:23 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20README=E3=81=AB=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=AB=E3=81=A4=E3=81=84=E3=81=A6=E8=BF=BD=E8=A8=98?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/crm-datafetch/.env.example | 17 +++++ .../.vscode/python.code-snippets | 2 +- ecs/crm-datafetch/README.md | 72 +++++++++++++++++++ 3 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 ecs/crm-datafetch/.env.example 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... +```