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

时间:2018-10-05 08:50:47

标签: exception abap

我想要最简单的方法来在ABAP中用自定义消息引发异常。

如果可以用尽可能少的字符完成操作,那就太好了。如果可能的话,在一行上。

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

背景:过去我使用Python编程语言。我喜欢在没有调试器的情况下进行调试。我在代码中放入了assert 0, myvar行,并执行了代码。对我来说,这比传统调试器更快或更快进入代码行。我在ABAP中搜索与assert 0, mvar等效的内容。

提出例外只是我目前心中的策略。欢迎使用其他达成总体目标的策略。

我正在编码一个通过RFC调用的函数。

3 个答案:

答案 0 :(得分:2)

我发现这可行:

20 bytes

我仅将MESSAGE TYPE'E'临时添加到代码中。我从外部(通过PyRFC)测试我的ABAP代码。

答案 1 :(得分:0)

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

这是一个文档:

ASSERT

答案 2 :(得分:0)

您已经发现,MESSAGE text TYPE 'E'将使您抛出任意消息,从而中止程序执行。您也可以选择'A'作为类型。但是,请勿使用它来测试您的代码

有几个原因:

  1. 正如MESSAGE的文档明确指出的那样,MESSAGE仅用于与用户交互,并且仅应在与用户界面最接近的代码层使用。消息的确切行为很难预测,因为它取决于代码执行的处理模式,请参见。 the documentation of message behavior。如果绝对需要,请改用ASSERT,它的行为要一致得多。

  2. 出于测试目的,您应该更改生产代码。测试代码和生产代码应尽可能不相交,因为否则可能会导致意外地将纯粹用于测试的代码留在生产代码中的风险。如今,ABAP以ABAP单元的形式提供了功能强大的单元测试框架。 cl_abap_unit_assert的断言方法都提供了一个msg参数,您可以使用该参数来定义针对失败测试的非常具体的错误消息。这样一来,您就可以进行详细的测试,而不必更改生产代码(如果您将其设计为可测试的)。

  3. MESSAGEASSERT都产生简短的转储。在开发系统中,通常不认为这有那么糟糕,但是如果可以的话,您应该避免产生短转储,因为这会使例如ST22日志可以区分成熟代码中真正的不可预见的错误情况和活动​​开发期间失败的测试。失败的单元测试不会转储,并且同样有用。