Exception 在ABAP中使用自定义消息引发异常

Exception 在ABAP中使用自定义消息引发异常,exception,abap,assert,Exception,Abap,Assert,我正在编写一个通过RFC调用的函数,我想找到在ABAP中使用自定义消息引发异常的最简单方法。这将是伟大的,如果这可以做到尽可能短,如果可能的话在一行 我希望这个用于调试,而不是运行生产代码 背景: 过去我使用Python编程语言。我喜欢在没有调试器的情况下进行调试。我将一些assert0,myvar行放入代码并执行代码。对我来说,这感觉比传统调试器更快,只需跨过或跨入代码行即可。我正在ABAP中搜索一个等价于断言0的mvar 提出一个例外是我目前考虑的策略。实现总体目标的任何其他策略都是受欢迎的

我正在编写一个通过RFC调用的函数,我想找到在ABAP中使用自定义消息引发异常的最简单方法。这将是伟大的,如果这可以做到尽可能短,如果可能的话在一行

我希望这个用于调试,而不是运行生产代码

背景:

过去我使用Python编程语言。我喜欢在没有调试器的情况下进行调试。我将一些
assert0,myvar
行放入代码并执行代码。对我来说,这感觉比传统调试器更快,只需跨过或跨入代码行即可。我正在ABAP中搜索一个等价于断言0的mvar


提出一个例外是我目前考虑的策略。实现总体目标的任何其他策略都是受欢迎的。

我发现这是有效的:

message my_string_var type 'E'.

我将消息类型“E”仅临时添加到代码中。我从外部(通过)测试我的ABAP代码

ABAP中有一个ASSERT语句,您可以以类似于Python案例的方式使用它

这是一份文件:

正如您已经发现的,将允许您抛出中止程序执行的任意消息。您也可以选择
'A'
作为类型。但是,不要使用它来测试代码

这有几个原因:

  • 正如
    MESSAGE
    的文档中明确指出的那样,
    MESSAGE
    专门用于与用户交互,并且只能在最靠近用户界面的代码布局中使用。消息的确切行为很难预测,因为它取决于代码执行的处理模式,参见。如果你一定要这样做,那就改用它,因为它的行为更加一致

  • 您不应该为了测试目的而修改生产代码。测试代码和生产代码应该尽可能不相交,因为否则您可能会意外地将纯粹用于测试的代码留在生产代码中。如今,ABAP以ABAP单元的形式提供了一个强大的单元测试框架。
    cl\u abap\u unit\u assert
    的断言方法都提供了一个
    msg
    参数,您可以使用该参数为失败的测试定义非常具体的错误消息。这允许您进行详细的测试,而无需修改生产代码(如果您将其设计为可测试的)

  • 消息
    断言
    都会产生短转储。在开发系统中,这通常没有那么糟糕,但如果可以的话,您应该避免产生短转储,因为这使ST22日志等的读者更难区分成熟代码中真正未预见的错误情况和活动开发期间失败的测试。失败的单元测试不会转储,而且同样有用


  • 我将消息类型“E”仅临时添加到代码中。我从外部(通过pyRFC)测试我的ABAP代码。我在问自己,你的答案是否真的是答案。不知怎的,这看起来像是对我答案的评论。