ABAP 代码中的 TEST-INJECTION 和 TEST-SEAM
TEST-INJECTION and TEST-SEAM in ABAP code
我正在尝试在我的代码中使用 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.
指出以下三个错误:
- No injection is expected here.
- Field "R" is unknown.
- Incorrect nesting: For the statement "END-TEST-INJECTION", there is no open structure introduced by "TEST-INJECTION".
我也尝试从文档和博客中复制一些示例代码,但返回了相同的错误。
出现问题的原因是什么?
请参阅有关测试接缝的文档 here。
Note
Injections can only be created in test classes that are defined in a
test include of the current program. Test includes are currently only
possible in class pools and function groups. This means that test
seams are only feasible in class pools and function groups.
另请注意,它们仅在 ABAP 7.50 版后才存在(感谢 Sandra)
要说清楚:文档中提到了 class 池,这意味着它不会在例如报道。您必须声明一个全局 class 并在其测试包含中定义本地测试 class。
我正在尝试在我的代码中使用 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.
指出以下三个错误:
- No injection is expected here.
- Field "R" is unknown.
- Incorrect nesting: For the statement "END-TEST-INJECTION", there is no open structure introduced by "TEST-INJECTION".
我也尝试从文档和博客中复制一些示例代码,但返回了相同的错误。
出现问题的原因是什么?
请参阅有关测试接缝的文档 here。
Note
Injections can only be created in test classes that are defined in a test include of the current program. Test includes are currently only possible in class pools and function groups. This means that test seams are only feasible in class pools and function groups.
另请注意,它们仅在 ABAP 7.50 版后才存在(感谢 Sandra)
要说清楚:文档中提到了 class 池,这意味着它不会在例如报道。您必须声明一个全局 class 并在其测试包含中定义本地测试 class。