使用Eclipse进行ABAP单元测试时遇zcalc_result类型未知错误
解决ABAP代码激活错误“ZCALC_RESULT TYPE IS UNKNOWN”
ZCALC_RESULT是自定义数据类型,你的ABAP系统中没有创建这个类型,所以激活时触发“类型未知”的错误。教程视频中能正常运行,是因为教程使用的系统已经提前定义了该类型。
解决方案步骤:
定义
ZCALC_RESULT类型
你可以直接在报表开头添加类型定义,推荐使用带2位小数的P类型(适配薪资计算场景):TYPES: zcalc_result TYPE p DECIMALS 2.或者通过事务码
SE11创建数据元素(适合需要复用该类型的场景)。修正代码中的拼写错误
你的代码里还有几处拼写问题,不修正也会导致激活失败:employee类构造方法中,emplyee_name应为employee_name(少了一个e)payment_calculator类的calculate_payment方法中,参数emploee应为employee(少了一个y)- 测试方法
calc_developer_bellow_limit中,调用calculate_payment时需要传入员工对象
修正后的完整代码
REPORT zfsaf_tdd3_babysteps. * 定义自定义类型适配薪资计算 TYPES: zcalc_result TYPE p DECIMALS 2. *Desenvolvedores: *Salário igual ou aima de $3000, desconto de 20% *Salário abaixo de $3000, desconto de 10% * *DA e Testadores: *Salário igual ou acima de de $2500, desconto de 25% *Salário de $2500, desconto de 15% CLASS employee DEFINITION. PUBLIC SECTION. METHODS constructor IMPORTING employee_name TYPE string employee_salary TYPE zcalc_result employee_position TYPE string. METHODS get_salary RETURNING VALUE(salary) TYPE zcalc_result. METHODS get_position RETURNING VALUE(position) TYPE string. PRIVATE SECTION. DATA name TYPE string. DATA salary TYPE zcalc_result. DATA position TYPE string. ENDCLASS. CLASS employee IMPLEMENTATION. METHOD constructor. me->name = employee_name. me->position = employee_position. me->salary = employee_salary. ENDMETHOD. METHOD get_salary. salary = me->salary. ENDMETHOD. METHOD get_position. position = me->position. ENDMETHOD. ENDCLASS. CLASS test_payment_calculator DEFINITION FOR TESTING RISK LEVEL HARMLESS. PRIVATE SECTION. DATA test_employee TYPE REF TO employee. DATA test_payment_calculator TYPE REF TO payment_calculator. METHODS setup. METHODS calc_developer_bellow_limit FOR TESTING. ENDCLASS. CLASS test_payment_calculator IMPLEMENTATION. METHOD setup. CREATE OBJECT me->test_payment_calculator. ENDMETHOD. METHOD calc_developer_bellow_limit. CREATE OBJECT me->test_employee EXPORTING employee_name = 'Chaves' employee_position = 'Developer' employee_salary = '1500.00'. DATA(value) = me->test_payment_calculator->calculate_payment( employee = me->test_employee ). cl_abap_unit_assert=>assert_equals( exp = '1350.00' act = value ). ENDMETHOD. ENDCLASS. CLASS payment_calculator DEFINITION. PUBLIC SECTION. METHODS calculate_payment IMPORTING employee TYPE REF TO employee RETURNING VALUE(value) TYPE zcalc_result. ENDCLASS. CLASS payment_calculator IMPLEMENTATION. METHOD calculate_payment. " 后续可根据职位逻辑实现计算逻辑,当前先返回固定值 value = '1350.00'. ENDMETHOD. ENDCLASS.
内容的提问来源于stack exchange,提问作者Fabrício
相关产品推荐
相关产品推荐

