我有以下全局类,它应该保存对
IF_OSQL_TEST_ENVIRONMENT
的引用作为静态属性。
CLASS zcl_static_holder DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-DATA sr_osql_test_environment TYPE REF TO if_osql_test_environment .
CLASS-METHODS class_constructor .
CLASS-METHODS set_osql_test_environment
IMPORTING
!ir_osql_test_environment TYPE REF TO if_osql_test_environment .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_static_holder IMPLEMENTATION.
METHOD class_constructor.
BREAK-POINT.
ENDMETHOD.
METHOD set_osql_test_environment.
sr_osql_test_environment = ir_osql_test_environment.
ENDMETHOD.
ENDCLASS.
现在我在以下程序的单元测试中设置此静态属性。在通过 setter 初始化静态属性之前,会调用上述类的类构造函数。然而,提交报告后,类构造函数被第二次调用,并且静态属性当然不再设置。
REPORT zsubmit_with_static_holder.
CLASS lcl_test DEFINITION FINAL FOR TESTING
RISK LEVEL HARMLESS DURATION SHORT.
PUBLIC SECTION.
METHODS:
test FOR TESTING.
ENDCLASS.
CLASS lcl_test IMPLEMENTATION.
METHOD test.
DATA(lr_osql_test_environment) = cl_osql_test_environment=>create(
VALUE #( ( 'T100' ) )
).
zcl_static_holder=>set_osql_test_environment( lr_osql_test_environment ).
SUBMIT zsubmit_with_static_holder
AND RETURN.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
IF zcl_static_holder=>sr_osql_test_environment IS NOT BOUND.
WRITE / 'Not bound.'.
ENDIF.
SELECT COUNT( * ) FROM t100.
IF sy-subrc <> 0.
WRITE / 'No entries. Table mocked!'.
ENDIF.
为什么会这样?我怎样才能让它发挥作用?我发现了一些关于数据库 LUW 和 SAP LUW 的信息,它可以通过共享内存对象来解决,另一方面,对于在单元测试中如此简单的使用来说,共享内存对象看起来非常复杂。