CLASS {{p}}t14_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS fare_for IMPORTING iv_distance TYPE decfloat34 iv_wait TYPE i iv_time TYPE t RETURNING VALUE(rv_fare) TYPE decfloat34. METHODS day_fare FOR TESTING. METHODS night_fare FOR TESTING. METHODS minimum_fare FOR TESTING. METHODS invalid_distance FOR TESTING. ENDCLASS. CLASS {{p}}t14_test IMPLEMENTATION. METHOD fare_for. CALL FUNCTION '{{P}}TAXI_FARE' EXPORTING iv_distance_km = iv_distance iv_wait_min = iv_wait iv_start_time = iv_time IMPORTING ev_fare = rv_fare EXCEPTIONS invalid_distance = 1 invalid_wait = 2 OTHERS = 3. cl_abap_unit_assert=>assert_subrc( exp = 0 ). ENDMETHOD. METHOD day_fare. DATA lv_expected TYPE decfloat34 VALUE '25.50'. DATA lv_actual TYPE decfloat34. lv_actual = fare_for( iv_distance = 10 iv_wait = 0 iv_time = '120000' ). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_actual ). ENDMETHOD. METHOD night_fare. DATA lv_expected TYPE decfloat34 VALUE '30.60'. DATA lv_actual TYPE decfloat34. lv_actual = fare_for( iv_distance = 10 iv_wait = 0 iv_time = '230000' ). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_actual ). ENDMETHOD. METHOD minimum_fare. DATA lv_expected TYPE decfloat34 VALUE '5.00'. DATA lv_actual TYPE decfloat34. lv_actual = fare_for( iv_distance = 0 iv_wait = 0 iv_time = '120000' ). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_actual ). ENDMETHOD. METHOD invalid_distance. DATA lv_fare TYPE decfloat34. CALL FUNCTION '{{P}}TAXI_FARE' EXPORTING iv_distance_km = -1 iv_wait_min = 0 iv_start_time = '120000' IMPORTING ev_fare = lv_fare EXCEPTIONS invalid_distance = 1 OTHERS = 2. cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ). ENDMETHOD. ENDCLASS.