From a9d8a54fe96e41f7347421ceb657bf7ce2c6dd28 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 3 Aug 2022 23:40:26 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=BA=96=E5=82=99=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=81=A7=E3=82=B7=E3=82=B9=E3=83=86=E3=83=A0=E4=BE=8B=E5=A4=96?= =?UTF-8?q?=E4=BB=A5=E5=A4=96=E3=81=AE=E4=BE=8B=E5=A4=96=E3=81=8C=E7=99=BA?= =?UTF-8?q?=E7=94=9F=E3=81=97=E3=81=9F=E5=A0=B4=E5=90=88=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0(parametrize?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88)=E3=80=82=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E5=87=BA=E5=8A=9B=E6=99=82=E3=81=AB=E3=83=90=E3=82=B0=E3=81=A3?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/crm-datafetch/src/controller.py | 2 +- ecs/crm-datafetch/tests/test_controller.py | 44 ++++++++++++++-------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/ecs/crm-datafetch/src/controller.py b/ecs/crm-datafetch/src/controller.py index 165c8b7e..a7a6fe00 100644 --- a/ecs/crm-datafetch/src/controller.py +++ b/ecs/crm-datafetch/src/controller.py @@ -58,7 +58,7 @@ def controller() -> None: raise e except Exception as e: - logger.exception('E-ERR-02 予期せぬエラーが発生したため、処理を終了します', e) + logger.exception(f'E-ERR-02 予期せぬエラーが発生したため、処理を終了します エラー内容: [{e}]') raise e finally: diff --git a/ecs/crm-datafetch/tests/test_controller.py b/ecs/crm-datafetch/tests/test_controller.py index 43dfed94..d9d21112 100644 --- a/ecs/crm-datafetch/tests/test_controller.py +++ b/ecs/crm-datafetch/tests/test_controller.py @@ -20,8 +20,15 @@ EXPECT_PROCESS_RESULT = { } -class ForTestControllerException(MeDaCaCRMDataFetchException): - pass +class ForTestMeDaCaCRMDataFetchException(MeDaCaCRMDataFetchException): + def __init__(self, error_id: str, func_name: str, message: str) -> None: + super().__init__(error_id, func_name, message) + + +class ForTestException(Exception): + # カスタム例外とインタフェースを合わせるための引数 + def __init__(self, error_id: str, func_name: str, message: str) -> None: + super().__init__(message) class TestController: @@ -352,27 +359,34 @@ class TestController: ) in caplog.record_tuples, 'オブジェクト情報.is_skipがFalseのものはCSVアップロード処理のログメッセージが出力されていること' assert generate_log_message_tuple(log_message=f'I-CTRL-20 CRMデータ取得処理を終了します') in caplog.record_tuples - def test_raise_prepare_data_fetch_process(self, s3_client, monkeypatch, caplog): + @pytest.mark.parametrize( + 'exception, message', + [ + (ForTestMeDaCaCRMDataFetchException, f'E-ERR-01 [{PRE_JP_NAME}]でエラーが発生したため、処理を終了します'), + (ForTestException, 'E-ERR-02 予期せぬエラーが発生したため、処理を終了します エラー内容: [例外発生]') + ]) + def test_raise_prepare_data_fetch_process(self, s3_client, monkeypatch, caplog, exception, message): """ Cases: - データ取得準備処理でシステム例外が発生した場合、エラーで終了すること + 1. データ取得準備処理でシステム例外が発生した場合、エラーで終了すること + 2. データ取得準備処理で想定外の例外が発生した場合、エラーで終了すること Arranges: - データ取得準備処理でシステム例外が発生するようにする Expects: - データ取得準備処理で例外が発生すること - データ取得準備処理で発生した例外のログメッセージが出力されていること """ - expect_exception = ForTestControllerException('E-PRE-01', PRE_JP_NAME, '例外発生') + expect_exception = exception('E-PRE-01', PRE_JP_NAME, '例外発生') mock_prepare_data_fetch_process = MagicMock(side_effect=expect_exception) mock_check_object_info_process = MagicMock() with patch('src.controller.prepare_data_fetch_process', mock_prepare_data_fetch_process),\ patch('src.controller.check_object_info_process', mock_check_object_info_process): - with pytest.raises(MeDaCaCRMDataFetchException): + with pytest.raises(exception): controller.controller() assert mock_check_object_info_process.called is False assert generate_log_message_tuple( log_level=logging.ERROR, - log_message=f'E-ERR-01 [{PRE_JP_NAME}]でエラーが発生したため、処理を終了します'), 'データ取得準備処理で発生した例外のログメッセージが出力されていること' + log_message=message.format()) in caplog.record_tuples, 'データ取得準備処理で発生した例外のログメッセージが出力されていること' def test_raise_check_object_info_process(self, s3_client, monkeypatch, caplog): """ @@ -406,7 +420,7 @@ class TestController: ] } mock_target_objects = FetchTargetObjects(objects) - mock_target_object_first = ForTestControllerException('E-PRE-01', CHK_JP_NAME, '例外発生') + mock_target_object_first = ForTestMeDaCaCRMDataFetchException('E-PRE-01', CHK_JP_NAME, '例外発生') mock_target_object_second = TargetObject(objects['objects'][1], mock_execute_datetime) mock_target_object_third = TargetObject(objects['objects'][2], mock_execute_datetime) mock_return_values = [mock_target_object_first, mock_target_object_second, mock_target_object_third] @@ -492,7 +506,7 @@ class TestController: }, mock_execute_datetime) mock_prepare_data_fetch_process = MagicMock(return_value=(mock_target_objects, mock_execute_datetime, {})) mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - mock_set_datetime_period_process = MagicMock(side_effect=[ForTestControllerException( + mock_set_datetime_period_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( 'E-DATE-01', DATE_JP_NAME, '例外発生'), mock_last_fetch_datetime, mock_last_fetch_datetime]) mock_fetch_crm_data_process = MagicMock(return_value=[{}]) mock_backup_crm_data_process = MagicMock() @@ -569,7 +583,7 @@ class TestController: mock_prepare_data_fetch_process = MagicMock(return_value=(mock_target_objects, mock_execute_datetime, {})) mock_check_object_info_process = MagicMock(side_effect=mock_return_values) mock_set_datetime_period_process = MagicMock(return_value=mock_last_fetch_datetime) - mock_fetch_crm_data_process = MagicMock(side_effect=[ForTestControllerException( + mock_fetch_crm_data_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( 'E-FETCH-01', FETCH_JP_NAME, '例外発生'), {}, {}]) mock_backup_crm_data_process = MagicMock() mock_convert_crm_csv_data_process = MagicMock() @@ -646,7 +660,7 @@ class TestController: mock_check_object_info_process = MagicMock(side_effect=mock_return_values) mock_set_datetime_period_process = MagicMock(return_value=mock_last_fetch_datetime) mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) - mock_backup_crm_data_process = MagicMock(side_effect=[ForTestControllerException( + mock_backup_crm_data_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( 'E-RESBK-01', RESBK_JP_NAME, '例外発生'), None, None]) mock_convert_crm_csv_data_process = MagicMock() mock_backup_crm_csv_data_process = MagicMock() @@ -723,7 +737,7 @@ class TestController: mock_set_datetime_period_process = MagicMock(return_value=mock_last_fetch_datetime) mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) mock_backup_crm_data_process = MagicMock() - mock_convert_crm_csv_data_process = MagicMock(side_effect=[ForTestControllerException( + mock_convert_crm_csv_data_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( 'E-CONV-01', CONV_JP_NAME, '例外発生'), None, None]) mock_backup_crm_csv_data_process = MagicMock() mock_copy_crm_csv_data_process = MagicMock() @@ -800,7 +814,7 @@ class TestController: mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) mock_backup_crm_data_process = MagicMock() mock_convert_crm_csv_data_process = MagicMock() - mock_backup_crm_csv_data_process = MagicMock(side_effect=[ForTestControllerException( + mock_backup_crm_csv_data_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( 'E-CSVBK-01', CSVBK_JP_NAME, '例外発生'), None, None]) mock_copy_crm_csv_data_process = MagicMock() mock_upload_last_fetch_datetime_process = MagicMock() @@ -877,7 +891,7 @@ class TestController: mock_backup_crm_data_process = MagicMock() mock_convert_crm_csv_data_process = MagicMock() mock_backup_crm_csv_data_process = MagicMock() - mock_copy_crm_csv_data_process = MagicMock(side_effect=[ForTestControllerException( + mock_copy_crm_csv_data_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( 'E-UPLD-01', UPLD_JP_NAME, '例外発生'), None, None]) mock_upload_last_fetch_datetime_process = MagicMock() mock_upload_result_data_process = MagicMock() @@ -954,7 +968,7 @@ class TestController: mock_convert_crm_csv_data_process = MagicMock() mock_backup_crm_csv_data_process = MagicMock() mock_copy_crm_csv_data_process = MagicMock() - mock_upload_last_fetch_datetime_process = MagicMock(side_effect=[ForTestControllerException( + mock_upload_last_fetch_datetime_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( 'E-UPD-01', UPD_JP_NAME, '例外発生'), None, None]) mock_upload_result_data_process = MagicMock()