ABAP UNIT测试可以用于经典的ABAP程序吗?

时间:2012-10-05 20:08:34

标签: unit-testing abap

我想在我的ABAP程序中实现Abap Unit测试。我的第一份报告是ABAP的经典形式 - 没有OO课程等。

这甚至可能吗? ABAP UNIT是否意味着明确测试OO类?

或者,它还可以测试典型的表格吗?所以,如果我有一个名为的表格 “PERFORM get_date_range使用sy-date更改lv_fromdate lv_todate。”我可以为此编写ABAP单元测试吗?或者它必须是一个类中的方法吗?

顺便说一下..我是Java开发人员很长时间学习ABAP,并且想要使用ABAP UNIT。

5 个答案:

答案 0 :(得分:6)

我不确定我是否正确理解了这个问题,但你肯定可以在ABAP程序中包含单元测试,例如:报告程序。在报告程序中包含以下代码,然后进行编译。

之后,当您转到对象列表(Ctrl + Shift + F5显示)时,您可以右键单击您的程序,然后从菜单中选择Execute -> Unit Tests

重要的是,单元测试标记为FOR TESTING,并且至少有一个方法标记为FOR TESTINGRISK 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.

答案 1 :(得分:4)

你可以很好地使用测试类/方法

PERFORM <form> IN PROGRAM <prog>

然后验证你得到的结果。

编辑:

此外,SAP帮助说明了这一点:
创建ABAP单元测试
ABAP单元测试以ABAP程序中本地测试类中的测试方法的形式实现,并使用辅助类CL_AUNIT_ASSERT的静态方法检查预期结果。

这证明了ABAP程序的测试应该是本地测试类,这可以根据以下一些答案进行验证。一个人仍然可以使用PERFORM <form> IN PROGRAM <prog>,但我冒昧地尝试在本地进行测试是一种更好的方法。

吨。

答案 2 :(得分:4)

以下是单元测试的示例报告:

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.

答案 3 :(得分:0)

SAP具有official recommendations,可根据何处创建测试类

在ABAP程序的末尾创建ABAP Unit本地类和测试方法。 目前,ABAP程序和报告中没有单独的ABAP用于ABAP单元测试

因此,您只需在报告末尾添加本地测试类,例如was suggested by Rene

答案 4 :(得分:-1)

ABAP编程中,它将允许开发人员进行单元测试。

ABAPMACRO'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