我想在我的 ABAP 程序中实现 ABAP 单元测试,但我的第一份报告是经典的 ABAP 报告,根本没有 OO 类。
这甚至可能吗?还是仅用于 OO 类的 ABAP 单元?
我可以将它与子程序一起使用吗?
PERFORM get_date_range using sy-date changing lv_fromdate lv_todate.
PS 我是一名长期的 Java 开发人员,仍在学习 ABAP。
我想在我的 ABAP 程序中实现 ABAP 单元测试,但我的第一份报告是经典的 ABAP 报告,根本没有 OO 类。
这甚至可能吗?还是仅用于 OO 类的 ABAP 单元?
我可以将它与子程序一起使用吗?
PERFORM get_date_range using sy-date changing lv_fromdate lv_todate.
PS 我是一名长期的 Java 开发人员,仍在学习 ABAP。
这是带有单元测试的示例报告:
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.
我不确定我是否正确理解了这个问题,但您当然可以在 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.
你可以很好地在你的测试类/方法中使用
PERFORM <form> IN PROGRAM <prog>
然后验证你得到的结果。
编辑:
此外,SAP 帮助说明了这一点:
创建 ABAP 单元测试
ABAP 单元测试以测试方法的形式在 ABAP 程序中的本地测试类中实现,并使用辅助类 CL_AUNIT_ASSERT 的静态方法检查预期结果。
这验证了 ABAP 程序的测试应该是本地测试类,如下面的一些答案。仍然可以使用PERFORM <form> IN PROGRAM <prog>
,但我敢冒险,这是一种在本地进行测试的更好方法。
T。
在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
SAP 有在哪里创建测试类的官方建议,根据这些建议
在 ABAP 程序结束时创建 ABAP Unit 本地类和测试方法。当前没有单独的 ABAP 包含在 ABAP 程序和 ABAP 单元测试报告中
因此,您应该像Rene 所建议的那样,在报告末尾简单地添加本地测试类。
使用或编写<mainprogram_name> 程序,您可以编写带有Define <your_macro> 结束定义的宏来重复一个过程。你可以调用一个类方法:
class=>method(exporting = something
importing = others)
或者,您可以在主程序中创建子程序。等等