11

我想在我的 ABAP 程序中实现 ABAP 单元测试,但我的第一份报告是经典的 ABAP 报告,根本没有 OO 类。

这甚至可能吗?还是仅用于 OO 类的 ABAP 单元?

我可以将它与子程序一起使用吗?

PERFORM get_date_range using sy-date changing lv_fromdate lv_todate.

PS 我是一名长期的 Java 开发人员,仍在学习 ABAP。

4

6 回答 6

8

这是带有单元测试的示例报告:

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.
于 2012-10-08T09:39:57.857 回答
7

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

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

重要的部分是单元测试被标记为FOR TESTING并且至少有一个方法被标记FOR TESTING。该RISK 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.
于 2012-10-08T05:55:46.813 回答
5

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

PERFORM <form> IN PROGRAM <prog>

然后验证你得到的结果。

编辑:

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

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

T。

于 2012-10-05T20:59:29.470 回答
1

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

ABAP也包含MACRO's类似 in 的概念C-programming,但 inABAP 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
于 2017-11-16T05:19:11.900 回答
0

SAP 有在哪里创建测试类的官方建议,根据这些建议

在 ABAP 程序结束时创建 ABAP Unit 本地类和测试方法。当前没有单独的 ABAP 包含在 ABAP 程序和 ABAP 单元测试报告中

因此,您应该像Rene 所建议的那样,在报告末尾简单地添加本地测试类。

于 2020-11-17T14:54:03.223 回答
0

使用或编写<mainprogram_name> 程序,您可以编写带有Define <your_macro> 结束定义的宏来重复一个过程。你可以调用一个类方法:

class=>method(exporting = something 
importing = others)

或者,您可以在主程序中创建子程序。等等

于 2022-02-22T00:15:38.823 回答