Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *&---------------------------------------------------------------------*
- *& Report ZABAP_UNIT_SAMPLE
- *&
- *&---------------------------------------------------------------------*
- *&
- *&
- *&---------------------------------------------------------------------*
- REPORT ZABAP_UNIT_SAMPLE.
- *LCL_MATHのメソッドSUMのテストコードSAMPLE
- *LCL_MATHのSUMは引数に引数を加算するメソッドにしたいが、
- *誤って引数に引数を乗算する実装になっている。
- *これをユニットテストで検出するサンプル
- *テストクラスでLCL_MATHのSUMメソッドに3を渡し、
- *テストクラスで6が帰ってくるかチェックする
- *本プログラムでは誤った実装がされているので9が帰ってくるためエラーとなる
- *ユニットテストはメニュー→プログラム→テスト→単体テスト(ctrl+shit+F10)
- * 本稼動クラス
- *----------------------------------------------------------------------*
- * CLASS LCL_MATH DEFINITION
- *----------------------------------------------------------------------*
- CLASS LCL_MATH DEFINITION.
- PUBLIC SECTION.
- METHODS: SUM IMPORTING IV_1 TYPE I
- RETURNING VALUE(RV_SUM) TYPE I.
- METHODS: MULTIPLY IMPORTING IV_1 TYPE I
- RETURNING VALUE(RV_MULTIPLY) TYPE I.
- ENDCLASS. "LCL_MATH DEFINITION
- *----------------------------------------------------------------------*
- * CLASS LCL_MATH IMPLEMENTATION
- *----------------------------------------------------------------------*
- CLASS LCL_MATH IMPLEMENTATION.
- METHOD SUM.
- RV_SUM = IV_1 * IV_1. "← IV_1 + IV_1 としたい所を間違えて*としたケース
- ENDMETHOD. "sum
- METHOD MULTIPLY.
- RV_MULTIPLY = IV_1 * IV_1.
- ENDMETHOD. "multiply
- ENDCLASS. "LCL_MATH IMPLEMENTATION
- * テストクラス
- CLASS LCL_TEST DEFINITION FOR TESTING.
- "#AU Risk_Level Harmless
- "#AU Duration Short
- *↑
- *擬似コメントでテストのリスクレベルと想定実行期間を設定できる。
- *"#AU Risk_Level Critical|Dangerous|Harmless
- *"#AU Duration Short|Medium|Long
- *Critical
- *システム設定やカスタマイズを変更するようなテスト
- *Dangerous
- *(テーブルのデータを変更するような)アプリケーションの永続的なデータを変更するようなテスト
- *Harmless
- *システム設定やテーブル変更などを伴わないテスト
- *Short
- *1秒以内に終わることが期待されているテスト(デフォルト)
- *Medium
- *1#10秒に終わることが期待されているテスト
- *Long
- *10秒以上かかるテスト
- PUBLIC SECTION.
- METHODS: M_SUM FOR TESTING.
- METHODS: M_MULTIPLY FOR TESTING.
- PRIVATE SECTION.
- ENDCLASS. "lcl_test DEFINITION
- *
- CLASS LCL_TEST IMPLEMENTATION.
- METHOD M_SUM.
- DATA: O_MATH TYPE REF TO LCL_MATH.
- DATA: LV_RESULT TYPE I.
- *
- CREATE OBJECT O_MATH.
- LV_RESULT = O_MATH->SUM( 3 ).
- *
- CL_AUNIT_ASSERT=>ASSERT_EQUALS(
- EXP = 6
- ACT = LV_RESULT
- MSG = '足し算になってない!'
- ).
- ENDMETHOD. "m_sum
- METHOD M_MULTIPLY.
- DATA: O_MATH TYPE REF TO LCL_MATH.
- DATA: LV_RESULT TYPE I.
- *
- CREATE OBJECT O_MATH.
- LV_RESULT = O_MATH->MULTIPLY( 3 ).
- *
- CL_AUNIT_ASSERT=>ASSERT_EQUALS(
- EXP = 9
- ACT = LV_RESULT
- MSG = '乗算になってない!'
- ).
- ENDMETHOD. "M_multiply
- ENDCLASS. "lcl_test IMPLEMENTATION
- *&---------------------------------------------------------------------*
- * START-OF-SELECTION
- *&---------------------------------------------------------------------**
- START-OF-SELECTION.
- DATA G_SUM TYPE REF TO LCL_MATH.
- DATA G_I TYPE I.
- create object G_SUM.
- G_I = G_SUM->SUM( 3 ).
- WRITE : / 'METHOD SUM ', G_I.
- G_I = G_SUM->MULTIPLY( 8 ).
- WRITE : / 'METHOD MULTIPLY ', G_I.
Add Comment
Please, Sign In to add comment