CLASS {{p}}t21_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS bill IMPORTING iv_consumption TYPE decfloat34 iv_tariff TYPE string iv_direct_debit TYPE abap_bool DEFAULT abap_false EXPORTING ev_bill TYPE decfloat34 ev_subrc TYPE sysubrc. METHODS basic_bill FOR TESTING. METHODS tier_bill FOR TESTING. METHODS debit_bill FOR TESTING. METHODS invalid_input FOR TESTING. METHODS unknown_tariff FOR TESTING. ENDCLASS. CLASS {{p}}t21_test IMPLEMENTATION. METHOD bill. CALL FUNCTION '{{P}}ENERGY_BILL' EXPORTING iv_consumption = iv_consumption iv_tariff = iv_tariff iv_direct_debit = iv_direct_debit IMPORTING ev_bill = ev_bill EXCEPTIONS invalid_consumption = 1 invalid_tariff = 2 OTHERS = 3. ev_subrc = sy-subrc. ENDMETHOD. METHOD basic_bill. bill( EXPORTING iv_consumption = 100 iv_tariff = `BASIC` IMPORTING ev_bill = DATA(lv_bill) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '44.00' ) act = lv_bill ). ENDMETHOD. METHOD tier_bill. bill( EXPORTING iv_consumption = 400 iv_tariff = `BASIC` IMPORTING ev_bill = DATA(lv_bill) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '133.60' ) act = lv_bill ). ENDMETHOD. METHOD debit_bill. bill( EXPORTING iv_consumption = 400 iv_tariff = `BASIC` iv_direct_debit = abap_true IMPORTING ev_bill = DATA(lv_bill) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '130.93' ) act = lv_bill ). ENDMETHOD. METHOD invalid_input. bill( EXPORTING iv_consumption = -1 iv_tariff = `BASIC` IMPORTING ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ). ENDMETHOD. METHOD unknown_tariff. bill( EXPORTING iv_consumption = 100 iv_tariff = `ECO` IMPORTING ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_rc ). ENDMETHOD. ENDCLASS.