ABAPプログラムにABAP単体テストを実装したいのですが、最初のレポートは従来のABAPレポートであり、OOクラスはまったくありません。
これも可能ですか?または、ABAPユニットはOOクラスのみを対象としていますか?
サブルーチンで使用できますか?
PERFORM get_date_range using sy-date changing lv_fromdate lv_todate.
PS私は長い間Java開発者であり、まだABAPを学んでいます。
ABAPプログラムにABAP単体テストを実装したいのですが、最初のレポートは従来のABAPレポートであり、OOクラスはまったくありません。
これも可能ですか?または、ABAPユニットはOOクラスのみを対象としていますか?
サブルーチンで使用できますか?
PERFORM get_date_range using sy-date changing lv_fromdate lv_todate.
PS私は長い間Java開発者であり、まだABAPを学んでいます。
単体テストを含むレポートの例を次に示します。
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.
質問を正しく理解したかどうかはわかりませんが、レポートプログラムなどの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.
あなたはあなたのテストクラス/メソッドの使用で非常にうまくいく可能性があります
PERFORM <form> IN PROGRAM <prog>
そして、戻ってきた結果を検証します。
編集:
さらに、SAPヘルプには次のように記載されています。ABAP単体テストの
作成ABAP
単体テストは、ABAPプログラムのローカルテストクラスのテストメソッドの形式で実装され、補助クラスCL_AUNIT_ASSERTの静的メソッドを使用して期待される結果がチェックされます。
これは、ABAPプログラムのテストが、以下の回答のようにローカルテストクラスである必要があるという点を検証します。まだ使用できますPERFORM <form> IN PROGRAM <prog>
が、ローカルでテストを行う方が良いアプローチだと思います。
T。
プログラミングではABAP
、開発者が単体テストを実行できるようになります。
ABAP
MACRO'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
SAPには、テストクラスを作成する場所に関する公式の推奨事項があります。
ABAPプログラムの最後に、ABAPユニットのローカルクラスとテストメソッドを作成します。現在、ABAPユニットテストのABAPプログラムおよびレポートに個別のABAPインクルードはありません。
したがって、Reneによって提案されたように、レポートの最後にローカルテストクラスを追加するだけです。
またはを使用して<mainprogram_name>をプログラムし、Define <your_macro>enddefinitionを使用してマクロを記述してプロセスを繰り返すことができます。クラスメソッドを呼び出すことができます。
class=>method(exporting = something
importing = others)
または、メインプログラムでサブルーチンを作成することもできます。等々