Guest User

Untitled

a guest
Mar 22nd, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.99 KB | None | 0 0
  1. *&---------------------------------------------------------------------*
  2. *& Report ZABAP_UNIT_SAMPLE
  3. *&
  4. *&---------------------------------------------------------------------*
  5. *&
  6. *&
  7. *&---------------------------------------------------------------------*
  8.  
  9. REPORT ZABAP_UNIT_SAMPLE.
  10.  
  11. *LCL_MATHのメソッドSUMのテストコードSAMPLE
  12.  
  13. *LCL_MATHのSUMは引数に引数を加算するメソッドにしたいが、
  14. *誤って引数に引数を乗算する実装になっている。
  15. *これをユニットテストで検出するサンプル
  16.  
  17. *テストクラスでLCL_MATHのSUMメソッドに3を渡し、
  18. *テストクラスで6が帰ってくるかチェックする
  19. *本プログラムでは誤った実装がされているので9が帰ってくるためエラーとなる
  20.  
  21. *ユニットテストはメニュー→プログラム→テスト→単体テスト(ctrl+shit+F10)
  22.  
  23. * 本稼動クラス
  24.  
  25. *----------------------------------------------------------------------*
  26. * CLASS LCL_MATH DEFINITION
  27. *----------------------------------------------------------------------*
  28. CLASS LCL_MATH DEFINITION.
  29. PUBLIC SECTION.
  30.  
  31. METHODS: SUM IMPORTING IV_1 TYPE I
  32. RETURNING VALUE(RV_SUM) TYPE I.
  33.  
  34.  
  35. METHODS: MULTIPLY IMPORTING IV_1 TYPE I
  36. RETURNING VALUE(RV_MULTIPLY) TYPE I.
  37.  
  38.  
  39.  
  40. ENDCLASS. "LCL_MATH DEFINITION
  41.  
  42. *----------------------------------------------------------------------*
  43. * CLASS LCL_MATH IMPLEMENTATION
  44. *----------------------------------------------------------------------*
  45. CLASS LCL_MATH IMPLEMENTATION.
  46. METHOD SUM.
  47. RV_SUM = IV_1 * IV_1. "← IV_1 + IV_1 としたい所を間違えて*としたケース
  48. ENDMETHOD. "sum
  49.  
  50. METHOD MULTIPLY.
  51. RV_MULTIPLY = IV_1 * IV_1.
  52. ENDMETHOD. "multiply
  53.  
  54. ENDCLASS. "LCL_MATH IMPLEMENTATION
  55.  
  56.  
  57.  
  58.  
  59.  
  60. * テストクラス
  61. CLASS LCL_TEST DEFINITION FOR TESTING.
  62. "#AU Risk_Level Harmless
  63. "#AU Duration Short
  64.  
  65. *↑
  66. *擬似コメントでテストのリスクレベルと想定実行期間を設定できる。
  67. *"#AU Risk_Level Critical|Dangerous|Harmless
  68. *"#AU Duration Short|Medium|Long
  69.  
  70. *Critical
  71. *システム設定やカスタマイズを変更するようなテスト
  72. *Dangerous
  73. *(テーブルのデータを変更するような)アプリケーションの永続的なデータを変更するようなテスト
  74. *Harmless
  75. *システム設定やテーブル変更などを伴わないテスト
  76.  
  77. *Short
  78. *1秒以内に終わることが期待されているテスト(デフォルト)
  79. *Medium
  80. *1#10秒に終わることが期待されているテスト
  81. *Long
  82. *10秒以上かかるテスト
  83.  
  84. PUBLIC SECTION.
  85. METHODS: M_SUM FOR TESTING.
  86. METHODS: M_MULTIPLY FOR TESTING.
  87.  
  88. PRIVATE SECTION.
  89.  
  90. ENDCLASS. "lcl_test DEFINITION
  91. *
  92. CLASS LCL_TEST IMPLEMENTATION.
  93. METHOD M_SUM.
  94. DATA: O_MATH TYPE REF TO LCL_MATH.
  95. DATA: LV_RESULT TYPE I.
  96. *
  97. CREATE OBJECT O_MATH.
  98. LV_RESULT = O_MATH->SUM( 3 ).
  99. *
  100. CL_AUNIT_ASSERT=>ASSERT_EQUALS(
  101. EXP = 6
  102. ACT = LV_RESULT
  103. MSG = '足し算になってない!'
  104. ).
  105. ENDMETHOD. "m_sum
  106.  
  107. METHOD M_MULTIPLY.
  108. DATA: O_MATH TYPE REF TO LCL_MATH.
  109. DATA: LV_RESULT TYPE I.
  110. *
  111. CREATE OBJECT O_MATH.
  112. LV_RESULT = O_MATH->MULTIPLY( 3 ).
  113. *
  114. CL_AUNIT_ASSERT=>ASSERT_EQUALS(
  115. EXP = 9
  116. ACT = LV_RESULT
  117. MSG = '乗算になってない!'
  118. ).
  119. ENDMETHOD. "M_multiply
  120.  
  121. ENDCLASS. "lcl_test IMPLEMENTATION
  122.  
  123. *&---------------------------------------------------------------------*
  124. * START-OF-SELECTION
  125. *&---------------------------------------------------------------------**
  126. START-OF-SELECTION.
  127.  
  128. DATA G_SUM TYPE REF TO LCL_MATH.
  129. DATA G_I TYPE I.
  130.  
  131. create object G_SUM.
  132.  
  133. G_I = G_SUM->SUM( 3 ).
  134. WRITE : / 'METHOD SUM ', G_I.
  135.  
  136. G_I = G_SUM->MULTIPLY( 8 ).
  137.  
  138. WRITE : / 'METHOD MULTIPLY ', G_I.
Add Comment
Please, Sign In to add comment