CLASS {{p}}t71_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS fee_for IMPORTING iv_category TYPE string iv_holes TYPE i iv_players TYPE i iv_tee_hour TYPE i RETURNING VALUE(rv_fee) TYPE decfloat34. METHODS reason_for IMPORTING iv_category TYPE string iv_holes TYPE i iv_players TYPE i iv_tee_hour TYPE i RETURNING VALUE(rv_reason) TYPE string. METHODS member_fee FOR TESTING. METHODS twilight_and_group FOR TESTING. METHODS invalid_holes FOR TESTING. ENDCLASS. CLASS {{p}}t71_test IMPLEMENTATION. METHOD fee_for. TRY. CALL FUNCTION '{{P}}GOLF_FEE' EXPORTING iv_category = iv_category iv_holes = iv_holes iv_players = iv_players iv_tee_hour = iv_tee_hour IMPORTING ev_fee = rv_fee. CATCH {{p}}cx_golf. cl_abap_unit_assert=>fail( msg = 'no exception expected' ). ENDTRY. ENDMETHOD. METHOD reason_for. DATA lv_fee TYPE decfloat34. TRY. CALL FUNCTION '{{P}}GOLF_FEE' EXPORTING iv_category = iv_category iv_holes = iv_holes iv_players = iv_players iv_tee_hour = iv_tee_hour IMPORTING ev_fee = lv_fee. CATCH {{p}}cx_golf INTO DATA(lo_exc). rv_reason = lo_exc->mv_reason. ENDTRY. ENDMETHOD. METHOD member_fee. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 25 ) act = fee_for( iv_category = 'M' iv_holes = 18 iv_players = 1 iv_tee_hour = 6 ) ). ENDMETHOD. METHOD twilight_and_group. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '168.77' ) act = fee_for( iv_category = 'G' iv_holes = 18 iv_players = 4 iv_tee_hour = 19 ) ). ENDMETHOD. METHOD invalid_holes. cl_abap_unit_assert=>assert_equals( exp = `INVALID_HOLES` act = reason_for( iv_category = 'M' iv_holes = 12 iv_players = 1 iv_tee_hour = 10 ) ). ENDMETHOD. ENDCLASS.