2012-10-05 9 views
9

Chciałbym wdrożyć testy jednostki Abap w moich programach ABAP. Mój pierwszy raport to klasyczna forma ABAP - brak klas OO, itp.Czy testy ABAP UNIT mogą być używane w klasycznych programach ABAP?

Czy to możliwe? Czy ABAP UNIT oznacza jawnie testowane klasy OO?

Czy może również testować typowe formularze? Tak więc, gdybym miał formularz o nazwie "PERFORM get_date_range przy użyciu sy-date zmieniając lv_fromdate lv_todate." Czy mogę napisać dla tego testu jednostkę ABAP? Czy musi to być metoda na zajęciach?

Przy okazji. Jestem długoletnim programistą Java uczącym się ABAP i chcącym korzystać z JEDNOSTKI ABAP.

Odpowiedz

3

Można było bardzo dobrze w swojej klasie Test/sposobu korzystania

PERFORM <form> IN PROGRAM <prog>

A potem walidacji wyników wrócisz.

Edit:

Ponadto państwa pomocy SAP to:
Tworzenie ABAP Jednostka Testy
testy ABAP urządzenia są realizowane w formie metod badawczych w lokalnych klas testowych programów ABAP i oczekiwane wyniki sprawdzane przy użyciu statycznych metod klasy pomocniczej CL_AUNIT_ASSERT.

Co potwierdza punkt, w którym testy dla programów ABAP powinny być lokalnymi klasami testowymi, jak w niektórych poniżej odpowiedziach. Nadal można używać PERFORM <form> IN PROGRAM <prog>, ale zaryzykowałbym, że lepszym podejściem jest posiadanie testów na miejscu.

T.

+0

Możesz testować, ale nie będzie to test jednostkowy. – fabiopagoti

+0

ahh ... Nie miałem teraz do czynienia z tą składnią "IN PROGRAM" ... powodem, dla którego zadałem to pytanie, jest to, że jestem tak nowy w stosunku do ABAP.W moim sklepie nie ma apetytu na testy Abap Unit. Używanie technik TDD jest dla mnie tylko osobistą sprawą i sprawienie, aby dział Abap działał w kodzie, który piszę. – Davidson

+0

Zachowaj tę składnię, jeśli zmienisz nazwę swojego programu. ;-) – fabiopagoti

4

Nie jestem pewien, czy dobrze zrozumiałem pytanie poprawnie, ale można z całą pewnością obejmują testy jednostkowe w programach ABAP, np raportować programy. Dodaj poniższy kod do programu raportowego, a następnie skompiluj go.

Po przejściu do Listy obiektów (Ctrl + Shift + F5 do wyświetlenia) można kliknąć prawym przyciskiem myszy program, a następnie wybrać z menu Execute -> Unit Tests.

Ważne jest to, że testy jednostkowe są oznaczone jako FOR TESTING i mają co najmniej jedną metodę oznaczoną jako FOR TESTING. Dodanie RISK LEVEL określi również, czy zgodnie z ustawieniami systemu można uruchomić test. (Naciśnij F1 w słowie kluczowym w edytorze, aby przeczytać więcej).

* 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

Oto przykład raport z testów jednostkowych:

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

Dziękujemy za dodatkowe przykłady. Bardzo doceniam ten wysiłek. I tak, zrozumiałeś to pytanie. – Davidson

-1

W ABAP programowania pozwoli programista zrobić testy jednostkowe.

ABAP zawiera również MACRO's pojęcie jak w C-programming, ale w ABAP MACROS nie pozwala na testowanie jednostkowe.

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