ABAP代码中的TEST-INJECTION和TEST-SEAM

时间:2018-07-13 11:47:30

标签: unit-testing testing abap

我正在尝试在代码中使用TEST-INJECTIONTEST-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.   
  3. 字段“ R”未知。
  4.   
  5. 不正确的嵌套:对于“ END-TEST-INJECTION”语句,没有“ TEST-INJECTION”引入的开放结构。
  6.   

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

出现问题的原因是什么?

1 个答案:

答案 0 :(得分:2)

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

  

注意

     

只能在定义了测试的测试类中创建注入   测试当前程序的include。目前仅包含测试   可能在类池和功能组中。这意味着测试   接缝仅在类池和功能组中可行。

还要注意,它们仅在ABAP 7.50版之后存在(由于Sandra

为了清楚起见:文档中提到了类池,这意味着它在例如报告。您必须使用其测试包含中定义的本地测试类声明一个全局类。