我有一个这样的ABAP行:
assert ( cond = 'x' ).
该函数的调用者(通过rfc)收到一条毫无意义的消息,表明某些断言失败。
由于我的源代码中有几个断言,因此我想提供和补充文字。
这样,如果客户向我发送错误消息,我就可以轻松找到匹配的行。
如何在ABAP中最简单地做到这一点?
更新:此问题关注assert
。但这是ABAP中的错误路线。我在这里写了一个更好的新问题:Raise Exception with custom message in ABAP
答案 0 :(得分:1)
我发现这可行:
message my_string_var type 'E'.
这不是一个断言,但它可以满足我的要求:它将终止函数并显示我的变量。
您可以使用此便捷的方法来序列化变量,以查看其内部。这里的变量foo_var
被序列化为json:
MESSAGE |Error foo_var: | &&
/ui2/cl_json=>serialize( data = foo_var
pretty_name = /ui2/cl_json=>pretty_mode-low_case ) TYPE 'E'.
答案 1 :(得分:1)
所有方法都具有可选的导入参数MSG,LEVEL和QUIT,其含义相同:
- MSG(类型:CSEQUENCE)包含(如果有)详细描述错误的文本
因此,您可以像这样轻松地将文本添加到声明中:
TRY.
cut->divide_by_zero( denominator = 1).
CATCH cx_sy_zerodivide.
ENDTRY.
cl_abap_unit_assert=>fail( msg = 'CX_SY_ZERODIVIDE not raised'
level = if_aunit_constants=>critical ).
答案 2 :(得分:0)
为在测试类中使用而设计的断言功能,详细信息为here。我认为不适合在普通代码中使用。您可以将 check 用于相同的功能,但不会返回任何消息。在函数或类中引发异常是正确的方法。
如果不想使用异常,则可以返回OK和MESSAGE变量。在您的方法/功能开始时,将“确定”设置为空,并发送MESSAGE(例如“存在错误”)消息。在执行操作之前,手动更新消息。最后清除消息,然后将X设置为MESSAGE。
function ZMKY_TEST.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(COND) TYPE C
*" EXPORTING
*" REFERENCE(OK) TYPE C
*" REFERENCE(MESSAGE) TYPE STRING
*"----------------------------------------------------------------------
clear: OK, MESSAGE.
MESSAGE = 'There is an error.'
MESSAGE = 'COND not equal to X'.
check COND = 'X'.
clear: MESSAGE.
OK = 'X'.
endfunction.