代码之家  ›  专栏  ›  技术社区  ›  jcjr Thunder-KC Inc

abap代码中的测试注入和测试接缝

  •  1
  • jcjr Thunder-KC Inc  · 技术社区  · 6 年前

    我想用 TEST-INJECTION TEST-SEAM 在我的密码里。我有以下代码:

    CLASS lcl_undertest DEFINITION.
      PUBLIC SECTION.
        CLASS-METHODS mymethod RETURNING VALUE(r) TYPE string.
    ENDCLASS.
    
    CLASS lcl_undertest IMPLEMENTATION.
      METHOD mymethod.
        TEST-SEAM vypis.
          r = 'abc'.
        END-TEST-SEAM.
      ENDMETHOD.
    ENDCLASS.
    
    CLASS ltc_testclass DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
      PRIVATE SECTION.
        METHODS test_method1 FOR TESTING.
    ENDCLASS.
    
    CLASS ltc_testclass IMPLEMENTATION.
      METHOD test_method1.
    
        TEST-INJECTION vypis.
          r = 'xyz'.
        END-TEST-INJECTION.
    
        DATA(res) = lcl_undertest=>mymethod( ).
        cl_abap_unit_assert=>assert_equals(
          act   = res
          exp   = 'xyz'
          msg   = 'nespravny text'
        ).
    
      ENDMETHOD.
    ENDCLASS.
    
    START-OF-SELECTION.
    WRITE / lcl_undertest=>mymethod( ) .
    

    对于这些线

        TEST-INJECTION vypis.
          r = 'xyz'.
        END-TEST-INJECTION.
    

    指出以下三个错误:

    1. 这里不需要注射。
    2. 字段“r”未知。
    3. 嵌套不正确:对于语句“end-test-injection”,没有“test-injection”引入的开放结构。

    我还试图从文档和博客中复制一些示例代码,但返回了相同的错误。

    出现问题的原因是什么?

    1 回复  |  直到 6 年前
        1
  •  2
  •   peterulb    6 年前

    请参阅有关测试接缝的文档 here 是的。

    注意

    只能在 当前程序的测试包含。测试包含当前仅 可能是类内池和函数组。这意味着测试 接缝仅在类池和功能组中可行。

    也知道它们只存在于ABAP发布7.50(感谢 Sandra )

    为了说明这一点:文档中提到了类池,这意味着它在报表中不起作用。您必须声明一个全局类,该类的test include中定义了本地测试类。