You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Eclipse进行ABAP单元测试时遇zcalc_result类型未知错误

解决ABAP代码激活错误“ZCALC_RESULT TYPE IS UNKNOWN”

ZCALC_RESULT是自定义数据类型,你的ABAP系统中没有创建这个类型,所以激活时触发“类型未知”的错误。教程视频中能正常运行,是因为教程使用的系统已经提前定义了该类型。

解决方案步骤:

  1. 定义ZCALC_RESULT类型
    你可以直接在报表开头添加类型定义,推荐使用带2位小数的P类型(适配薪资计算场景):

    TYPES: zcalc_result TYPE p DECIMALS 2.
    

    或者通过事务码SE11创建数据元素(适合需要复用该类型的场景)。

  2. 修正代码中的拼写错误
    你的代码里还有几处拼写问题,不修正也会导致激活失败:

    • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:35:20