-对测试驱动开发中的消息处理的怀疑

2020-08-20 05:03发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好 我试图在一个非常简单的s...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我试图在一个非常简单的se38程序中添加TDD,但遇到了一个问题,我尝试在论坛上进行谷歌搜索,但未找到解决方案。 因此,如果有人已经遇到了这个问题,那么请分享经验如何解决这一问题将对您有很大的帮助。

问题语句:在我的旧程序(不是基于OOP)中,在子例程中有一条message语句,这导致ABAP单元测试运行失败。

尝试了几种方法,到目前为止似乎没有成果。 每次它都会引发CX_AUNIT_UNCAUGHT_MESSAGE异常。

可能缺少一些非常基本的东西!

这是消息语句引起的问题,可能是因为它试图与GUI连接,不确定。

我正在下面的"测试类/方法"下处理这段代码:

但是它仍然失败,我的期望是,它应该通过测试。 As此消息需要根据给定的测试数据进行提示,并且我不想将该消息作为来自process_data例程的导出参数传递。 我想尽量保持表格不变。

任何指向该特定问题的指针都将非常有帮助。

谢谢。 索姆

(118.1 kB)
11条回答
d56caomao
2020-08-20 06:00

我已经用一些东西重建了一个完整的示例 像您的代码

您不应在OOo代码中使用MESSAGE语句。 您必须将其替换为异常类。 我也用异常类编写了代码。 您可以使用此异常类来保留消息编号/信息。

我还写了 Peter的建议。 Inotai (因为这样做最好)

 REPORT ztest_fg029。


 CLASS lx_my_error从cx_static_check继承。

   公共部分。
     接口if_t100_dyn_msg。
     接口if_t100_message。

     常数:
       开始使用fail_for_my_method,
         msgstr TYPE symsgid VALUE'00',
         msgno TYPE symsgno VALUE'001',
         attr1 TYPE scx_attrname VALUE'GV_ERROR_INFO',
         attr2 TYPE scx_attrname VALUE'',
         attr3 TYPE scx_attrname VALUE'',
         attr4 TYPE scx_attrname VALUE'',
       END OF failed_for_my_method。
     DATA gv_error_info TYPE字符串。

     方法构造函数
       输入
         !textid喜欢if_t100_message => t100key可选
         !previous喜欢上一个OPTIONAL
         iv_error_info TYPE字符串可选。
 ENDCLASS。



 类别lx_my_error实施。
   方法构造函数## ADT_SUPPRESS_GENERATION。
     调用方法超级>构造函数
       出口
         前一个=前一个。
     gv_error_info = iv_error_info。
     清除我-> textid。
     如果textid是INITIAL。
       if_t100_message〜t100key = if_t100_message => default_textid。
     其他。
       if_t100_message〜t100key = textid。
     万一。
   终结法。
 ENDCLASS。



 类别lc_生产性定义。

  公共部分。
     方法my_method引发lx_my_error。
     方法my_second_method引发lx_my_error。
 ENDCLASS。




 lc_productive的实现。

   方法my_method。
     带有" My_Method"的消息e001(00)几乎未失败。
   终结法。

   方法my_second_method。
     引发例外类型lx_my_error
       出口
         textid = lx_my_error => failed_for_my_method
         iv_error_info =" My_Method几乎没有失败"。
   终结法。

 ENDCLASS。


 类别ltc_生产性定义
       用于检测
       危险等级危害
       持续时间短
       最后。

   专用部分。
     方法设置。
     用于测试引发lx_my_error的方法test_method_1。
     用于测试引发lx_my_error的方法test_method_2。
     测试test_method_2_peter_com的方法以提高lx_my_error。
     数据o_cut类型参考lc_productive。

 ENDCLASS。


 类别ltc_productive实施。
   方法设置。
     o_cut =新的#()。
   方法。

   方法test_method_1。
     尝试。
     o_cut-> my_method()。
       将lx_my_error捕获到数据中(lo_exception)。
         data(lv_flag)= abap_true。
     努力。
     cl_abap_unit_assert => assert_equals(
       行为= lv_flag
       exp = abap_true)。
   方法。

   方法test_method_2。
     尝试。
     o_cut-> my_second_method()。
       将lx_my_error捕获到数据中(lo_exception)。
         data(lv_flag)= abap_true。
     努力。
     cl_abap_unit_assert => assert_equals(
       行为= lv_flag
       exp = abap_true)。
   方法。

   方法test_method_2_peter_com。
     尝试。
     o_cut-> my_second_method()。
       将lx_my_error捕获到数据中(lo_exception)。
     努力。
     cl_abap_unit_assert => assert_bound(lo_exception)。
   方法。
 结束类。
 

一周热门 更多>