수색…


테스트 클래스의 구조

테스트 클래스는 특수 단위 테스트 include에서 로컬 클래스로 작성됩니다.

이것은 테스트 클래스의 기본 구조입니다.

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 은 각 테스트 전에 실행되는 특별한 방법입니다.

논리에서 데이터 액세스를 분리하십시오.

단위 테스트의 중요한 원칙은 데이터 액세스를 비즈니스 논리와 분리하는 것입니다. 이를위한 효율적인 기술 중 하나는 데이터 액세스를위한 인터페이스를 정의하는 것입니다. 기본 클래스는 항상 데이터를 직접 읽거나 쓰는 대신 해당 인터페이스에 대한 참조를 사용합니다.

프로덕션 코드에서 기본 클래스에는 실제 데이터 액세스를 래핑하는 객체가 제공됩니다. 이것은 선택 진술, 함수 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_CLASSSELECT 를 수행하는 ZIF_DB_SCARR 객체를 가져 ZIF_DB_SCARR 단위 테스트가 유닛 테스트 include에 바로 정의 된 정적 데이터 집합에 대해 실행되는 동안 전체 테이블을 반환합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow