CLASS {{p}}t41_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS fee_for IMPORTING iv_lesson_type TYPE string iv_vehicle TYPE string iv_minutes TYPE i RETURNING VALUE(rv_fee) TYPE decfloat34. METHODS car_lesson FOR TESTING. METHODS surcharges FOR TESTING. METHODS minimum_fee FOR TESTING. METHODS block_flag FOR TESTING. METHODS invalid_minutes FOR TESTING. ENDCLASS. CLASS {{p}}t41_test IMPLEMENTATION. METHOD fee_for. DATA lv_block TYPE abap_bool. CALL FUNCTION '{{P}}DRV_FEE' EXPORTING iv_lesson_type = iv_lesson_type iv_vehicle = iv_vehicle iv_minutes = iv_minutes IMPORTING ev_block = lv_block CHANGING cv_fee = rv_fee EXCEPTIONS invalid_minutes = 1 OTHERS = 2. cl_abap_unit_assert=>assert_subrc( exp = 0 ). ENDMETHOD. METHOD car_lesson. DATA lv_exp TYPE decfloat34 VALUE '72.00'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = fee_for( iv_lesson_type = 'NORMAL' iv_vehicle = 'CAR' iv_minutes = 60 ) ). ENDMETHOD. METHOD surcharges. DATA lv_exp_night TYPE decfloat34 VALUE '90.00'. DATA lv_exp_motorway TYPE decfloat34 VALUE '105.00'. cl_abap_unit_assert=>assert_equals( exp = lv_exp_night act = fee_for( iv_lesson_type = 'NIGHT' iv_vehicle = 'CAR' iv_minutes = 60 ) ). cl_abap_unit_assert=>assert_equals( exp = lv_exp_motorway act = fee_for( iv_lesson_type = 'MOTORWAY' iv_vehicle = 'TRUCK' iv_minutes = 30 ) ). ENDMETHOD. METHOD minimum_fee. DATA lv_exp TYPE decfloat34 VALUE '15.00'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = fee_for( iv_lesson_type = 'NORMAL' iv_vehicle = 'MOTORCYCLE' iv_minutes = 10 ) ). ENDMETHOD. METHOD block_flag. DATA lv_block TYPE abap_bool. DATA lv_fee TYPE decfloat34. CALL FUNCTION '{{P}}DRV_FEE' EXPORTING iv_lesson_type = 'NORMAL' iv_vehicle = 'CAR' iv_minutes = 121 IMPORTING ev_block = lv_block CHANGING cv_fee = lv_fee. cl_abap_unit_assert=>assert_true( lv_block ). ENDMETHOD. METHOD invalid_minutes. DATA lv_fee TYPE decfloat34. CALL FUNCTION '{{P}}DRV_FEE' EXPORTING iv_lesson_type = 'NORMAL' iv_vehicle = 'CAR' iv_minutes = 0 CHANGING cv_fee = lv_fee EXCEPTIONS invalid_minutes = 1 OTHERS = 2. cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ). ENDMETHOD. ENDCLASS.