從邏輯中分離資料訪問
單元測試的一個重要原則是將資料訪問與業務邏輯分開。一種有效的技術是定義資料訪問介面。你的主類始終使用對該介面的引用,而不是直接讀取或寫入資料。
在生產程式碼中,主類將被賦予一個包裝實際資料訪問的物件。這可能是 select 語句,函式 mudule 呼叫,真的。重要的是這個類不應該執行任何其他操作。沒有邏輯。
在測試主類時,你給它一個服務靜態偽造資料的物件。
訪問 SCARR
表的示例
資料訪問介面 ZIF_DB_SCARR
:
INTERFACE zif_db_scarr
PUBLIC.
METHODS get_all
RETURNING
VALUE(rt_scarr) TYPE scarr_tab .
ENDINTERFACE.
假資料類和測試類:
CLASS lcl_db_scarr DEFINITION.
PUBLIC SECTION.
INTERFACES: zif_db_scarr.
ENDCLASS.
CLASS lcl_db_scarr IMPLEMENTATION.
METHOD zif_db_scarr~get_all.
" generate static data here
ENDMETHOD.
ENDCLASS.
CLASS lcl_test DEFINITION
FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA:
mo_cut TYPE REF TO zcl_main_class.
METHODS:
setup.
ENDCLASS.
CLASS lcl_test IMPLEMENTATION.
METHOD setup.
DATA: lo_db_scarr TYPE REF TO lcl_db_scarr.
CREATE OBJECT lo_db_scarr.
CREATE OBJECT mo_cut
EXPORTING
io_db_scarr = lo_db_scarr.
ENDMETHOD.
ENDCLASS.
這裡的想法是,在生產程式碼中,ZCL_MAIN_CLASS
將獲得一個 ZIF_DB_SCARR
物件,該物件執行 SELECT
並返回整個表,而單元測試針對在單元測試包含中定義的靜態資料集執行。