サーチ…


テストクラスの構造

テストクラスは、特別なユニットテストインクルードでローカルクラスとして作成されます。

これはテストクラスの基本的な構造です:

CLASS lcl_test DEFINITION
               FOR TESTING
               DURATION SHORT
               RISK LEVEL HARMLESS.

PRIVATE SECTION.
  DATA:
    mo_cut TYPE REF TO zcl_dummy.

  METHODS:
    setup,

  "********* 30 chars *********|
  dummy_test                     for testing.
ENDCLASS.

CLASS lcl_test IMPLEMENTATION.
  METHOD setup.
    CREATE OBJECT mo_cut.
  ENDMETHOD.

  METHOD dummy_test.
    cl_aunit_assert=>fail( ).
  ENDMETHOD.
ENDCLASS.

FOR TESTING宣言されたメソッドは単体テストになります。 setupは、各テストの前に実行される特殊なメソッドです。

ロジックからのデータアクセスを分離する

ユニットテストの重要な原則は、ビジネスロジックからデータアクセスを分離することです。このための効率的な手法の1つは、データアクセス用のインタフェースを定義することです。主なクラスは、直接データを読み書きするのではなく、常にそのインターフェイスへの参照を使用します。

プロダクションコードでは、メインクラスには実際のデータアクセスをラップするオブジェクトが与えられます。これは、選択ステートメント、関数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_CLASSZIF_DB_SCARRオブジェクトを取得し、 SELECTを実行し、ユニットテストがユニットテストのincludeに定義された静的データセットに対して実行されている間に、テーブル全体を返します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow