11

ABAPプログラムにABAP単体テストを実装したいのですが、最初のレポートは従来のABAPレポートであり、OOクラスはまったくありません。

これも可能ですか?または、ABAPユニットはOOクラスのみを対象としていますか?

サブルーチンで使用できますか?

PERFORM get_date_range using sy-date changing lv_fromdate lv_todate.

PS私は長い間Java開発者であり、まだABAPを学んでいます。

4

6 に答える 6

8

単体テストを含むレポートの例を次に示します。

report ztest.

end-of-selection.

  data number type i value 10.
  perform write_value using number.
  perform add_5 changing number.
  perform write_value using number.
  perform subtract_2 changing number.
  perform write_value using number.


form add_5 changing x type i.
  x = x + 5.
endform.

form subtract_2 changing x type i.
  x = x - 2.
endform.

form write_value using x type i.
  data x_str type string.
  x_str = x.
  condense x_str.
  write: / x_str.
endform.

class lcl_test definition for testing duration short risk level harmless.
  public section.
  protected section.
    methods add_5 for testing.
    methods subtract_2 for testing.
  private section.
    methods setup.
endclass.

class lcl_test implementation.
  method add_5.
    data number type i.
    number = 5.
    perform add_5 changing number.
    cl_aunit_assert=>assert_equals( act = number exp = 10 ).
    number = 20.
    perform add_5 changing number.
    cl_aunit_assert=>assert_equals( act = number exp = 25 ).
  endmethod.
  method subtract_2.
    data number type i.
    number = 5.
    perform subtract_2 changing number.
    cl_aunit_assert=>assert_equals( act = number exp = 3 ).
    number = 20.
    perform subtract_2 changing number.
    cl_aunit_assert=>assert_equals( act = number exp = 18 ).
  endmethod.
  method setup.
  endmethod.
endclass.
于 2012-10-08T09:39:57.857 に答える
7

質問を正しく理解したかどうかはわかりませんが、レポートプログラムなどのABAPプログラムに単体テストを含めることができます。以下のコードをレポートプログラムに含めてコンパイルします。

その後、オブジェクトリストに移動すると(Ctrl + Shift + F5で表示)、プログラムを右クリックしExecute -> Unit Testsてメニューから選択できます。

重要な部分は、単体テストがとしてマークされFOR TESTING、少なくとも1つのメソッドもマークさFOR TESTINGれていることです。このRISK LEVEL追加により、システム設定に従って、テストの実行が許可されるかどうかも決定されます。(詳細を読むには、エディターのキーワードでF1を押してください)。

* The following defines a unit test class
class unit_tests definition for testing risk level harmless.
  public section.
    methods: test_query for testing.
endclass.

class unit_tests implementation.
  method test_query.
    data: lv_result type string.
    perform execute_query_b using '123' changing lv_result.
    assert lv_result = 'Expected_value'.
  endmethod.
endclass.

* Here is a subroutine in our program we wish to test
form execute_query_b using a changing res.
  res = 'Expected_value'.
endform.
于 2012-10-08T05:55:46.813 に答える
5

あなたはあなたのテストクラス/メソッドの使用で非常にうまくいく可能性があります

PERFORM <form> IN PROGRAM <prog>

そして、戻ってきた結果を検証します。

編集:

さらに、SAPヘルプには次のように記載されています。ABAP単体テストの
作成ABAP
単体テストは、ABAPプログラムのローカルテストクラスのテストメソッドの形式で実装され、補助クラスCL_AUNIT_ASSERTの静的メソッドを使用して期待される結果がチェックされます。

これは、ABAPプログラムのテストが、以下の回答のようにローカルテストクラスである必要があるという点を検証します。まだ使用できますPERFORM <form> IN PROGRAM <prog>が、ローカルでテストを行う方が良いアプローチだと思います。

T。

于 2012-10-05T20:59:29.470 に答える
1

プログラミングではABAP、開発者が単体テストを実行できるようになります。

ABAPMACRO'sのような概念も含まれていますC-programmingが、のABAP MACROSは単体テストを許可していません。

REPORT ZDEMO_INTERNALTABLES.

TYPES : BEGIN OF ty_scarr,

        carrid TYPE scarr-carrid,
        carrname TYPE scarr-carrname,
        END OF ty_scarr.

DATA : it_scarr TYPE STANDARD TABLE OF ty_scarr,

       wa_scarr TYPE ty_scarr.
      PERFORM SA .

*&---------------------------------------------------------------------*
*&      Form  SA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*

FORM SA .

  wa_scarr-carrid = 'AA'.
        wa_scarr-carrname = 'American airlines'.
        insert wa_scarr into table it_scarr .

         wa_scarr-carrid = 'df'.
        wa_scarr-carrname = 'xmy demy airlines'.
        insert wa_scarr into table it_scarr.

         wa_scarr-carrid = 'AC'.
        wa_scarr-carrname = 'AIRLINES'.
        APPEND WA_SCARR TO IT_SCARR.

         wa_scarr-carrid = 'AD'.
        wa_scarr-carrname = 'American airlines'.
        insert wa_scarr into table it_scarr.


        if SY-SUBRC = 0.
          ENDIF.
ENDFORM.                    " SA
于 2017-11-16T05:19:11.900 に答える
0

SAPには、テストクラスを作成する場所に関する公式の推奨事項があります。

ABAPプログラムの最後に、ABAPユニットのローカルクラスとテストメソッドを作成します。現在、ABAPユニットテストのABAPプログラムおよびレポートに個別のABAPインクルードはありません。

したがって、Reneによって提案されたように、レポートの最後にローカルテストクラスを追加するだけです。

于 2020-11-17T14:54:03.223 に答える
0

またはを使用して<mainprogram_name>をプログラムし、Define <your_macro>enddefinitionを使用してマクロを記述してプロセスを繰り返すことができます。クラスメソッドを呼び出すことができます。

class=>method(exporting = something 
importing = others)

または、メインプログラムでサブルーチンを作成することもできます。等々

于 2022-02-22T00:15:38.823 に答える