我正在编写一个通过 RFC 调用的函数,我想找到最简单的方法来在 ABAP 中使用自定义消息引发异常。如果这可以尽可能短地完成,并且可以在一行上完成,那就太好了。
我希望它用于调试,而不是用于运行生产代码。
背景:
过去我使用Python编程语言。我喜欢在没有调试器的情况下进行调试。我放了一些assert 0, myvar
写入代码并执行代码。对我来说,这感觉比传统调试器更快地跳过或进入代码行。我正在寻找相当于assert 0, mvar
在ABAP中。
提出例外只是我目前想到的策略。欢迎实现总体目标的所有其他策略。
正如您已经发现的那样,MESSAGE text TYPE 'E' https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abapmessage.htm会让你抛出任意消息来中止程序执行。您还可以选择'A'
作为一种类型。然而,不要用它来测试你的代码.
有几个原因:
-
作为文档MESSAGE
明确指出,MESSAGE
专门用于与用户交互,并且只能在最接近用户界面的代码层中使用。消息的确切行为很难预测,因为它取决于执行代码的处理模式,参见。消息行为的文档 https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abenabap_messages_types.htm。如果你绝对必须,请使用ASSERT https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abapassert.htm相反,它具有更加一致的行为。
-
你应该not出于测试目的更改您的生产代码。测试代码和生产代码应该尽可能不相交,否则您可能会意外地将纯粹用于测试的代码留在生产代码中。如今,ABAP 以 ABAP Unit 的形式提供了强大的单元测试框架。的断言方法cl_abap_unit_assert
全部提供msg
参数,您可以使用该参数为失败的测试定义非常具体的错误消息。这允许您进行详细的测试,而无需更改生产代码(if您将其设计为可测试的)。
-
Both MESSAGE
and ASSERT
产生短转储。在开发系统中,这通常不会被视为那么糟糕,但如果可以的话,您应该避免生成短转储,因为这会让读者更难,例如: ST22 日志可将成熟代码中真正不可预见的错误情况与主动开发期间失败的测试区分开来。失败的单元测试不会转储,并且同样有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)