2012-10-05 20 views
9

我想在我的ABAP程序中實現Abap單元測試。我的第一個報告是一個經典的形式ABAP - 沒有OO類,等等。在傳統的ABAP程序中是否可以使用ABAP UNIT測試?

這甚至可能嗎? ABAP單元意味着明確地測試OO類嗎?

或者,它也可以測試典型的形式嗎?所以,如果我有一個名爲 的表單,「使用sy-date更改lv_fromdate lv_todate執行get_date_range」。我可以爲此寫一個ABAP單元測試嗎?或者它必須是班級中的一種方法?

Btw ..我很長一段時間Java開發人員學習ABAP,並希望使用ABAP單元。

回答

3

您可以在您的測試類/方法很好用

PERFORM <form> IN PROGRAM <prog>

然後驗證你回來的結果。

編輯:

此外,SAP幫助各國這樣的:
創建ABAP單元測試
ABAP單元測試中的局部測試類測試方法在ABAP程序的形式實現和預期結果使用輔助類CL_AUNIT_ASSERT的靜態方法進行檢查。

其中驗證測試ABAP程序的點應該是本地測試類,根據下面的答案。仍然可以使用PERFORM <form> IN PROGRAM <prog>,但我敢說這是一個更好的方法來在本地進行測試。

T.

+0

你可以測試,但這不會是一個單元測試。 – fabiopagoti

+0

ahh ...我現在沒有關於'IN PROGRAM'中的語法......我問這個問題的原因是因爲我是如此新的ABAP方式。我店裏對Abap Unit測試沒有興趣。對我來說,使用TDD技術只是一件私人事情,並且可以在我編寫的代碼中啓動和運行Abap單元。 – Davidson

+0

如果您重命名程序,請記住此語法。 ;-) – fabiopagoti

4

我不知道我是否正確地理解問題,但你肯定可以包括ABAP程序,如單元測試報告程序。將以下代碼包含在報告程序中,然後進行編譯。然後,當您進入對象列表(Ctrl + Shift + F5顯示)時,您可以右鍵單擊您的程序,然後從菜單中選擇Execute -> Unit Tests

重要的部分是單元測試被標記爲FOR TESTING並且至少有一個標記爲FOR TESTING的方法。此外,還將根據系統設置確定是否允許運行測試。 (在編輯器中點擊關鍵字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. 
2

下面是一個例子報告與單元測試:

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. 
+1

感謝您提供更多示例。我非常欣賞這一努力。而且,是的,你的確理解了這個問題。 – Davidson

-1

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