從邏輯中分離資料訪問

單元測試的一個重要原則是將資料訪問與業務邏輯分開。一種有效的技術是定義資料訪問介面。你的主類始終使用對該介面的引用,而不是直接讀取或寫入資料。

在生產程式碼中,主類將被賦予一個包裝實際資料訪問的物件。這可能是 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 並返回整個表,而單元測試針對在單元測試包含中定義的靜態資料集執行。