CLASS {{p}}t21_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS fee_of IMPORTING iv_type TYPE string iv_hours TYPE decfloat34 iv_parts TYPE decfloat34 iv_member TYPE abap_bool DEFAULT abap_false RETURNING VALUE(rv_total) TYPE decfloat34. METHODS brake_fee FOR TESTING. METHODS minimum_fee FOR TESTING. METHODS member_fee FOR TESTING. METHODS negative_hours FOR TESTING. ENDCLASS. CLASS {{p}}t21_test IMPLEMENTATION. METHOD fee_of. DATA lv_labour TYPE decfloat34. CALL FUNCTION '{{P}}REPAIR_FEE' EXPORTING iv_repair_type = iv_type iv_hours = iv_hours iv_parts_cost = iv_parts iv_member = iv_member IMPORTING ev_labour_fee = lv_labour ev_total_fee = rv_total EXCEPTIONS invalid_hours = 1 OTHERS = 2. cl_abap_unit_assert=>assert_subrc( exp = 0 ). ENDMETHOD. METHOD brake_fee. DATA lv_exp TYPE decfloat34. lv_exp = '110.00'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = fee_of( iv_type = 'BR' iv_hours = '1.5' iv_parts = '20' ) ). ENDMETHOD. METHOD minimum_fee. DATA lv_exp TYPE decfloat34. lv_exp = '25.00'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = fee_of( iv_type = 'WH' iv_hours = '0.5' iv_parts = '1' ) ). ENDMETHOD. METHOD member_fee. DATA lv_exp TYPE decfloat34. lv_exp = '101.00'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = fee_of( iv_type = 'BR' iv_hours = '1.5' iv_parts = '20' iv_member = abap_true ) ). ENDMETHOD. METHOD negative_hours. DATA lv_total TYPE decfloat34. CALL FUNCTION '{{P}}REPAIR_FEE' EXPORTING iv_repair_type = 'BR' iv_hours = '-1' iv_parts_cost = '0' iv_member = abap_false IMPORTING ev_total_fee = lv_total EXCEPTIONS invalid_hours = 1 OTHERS = 2. cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ). ENDMETHOD. ENDCLASS.