我想在我的ABAP程序中实现Abap Unit测试。我的第一份报告是ABAP的经典形式 - 没有OO课程等。
这甚至可能吗? ABAP UNIT是否意味着明确测试OO类?
或者,它还可以测试典型的表格吗?所以,如果我有一个名为的表格 “PERFORM get_date_range使用sy-date更改lv_fromdate lv_todate。”我可以为此编写ABAP单元测试吗?或者它必须是一个类中的方法吗?
顺便说一下..我是Java开发人员很长时间学习ABAP,并且想要使用ABAP UNIT。
答案 0 :(得分:6)
我不确定我是否正确理解了这个问题,但你肯定可以在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.
答案 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
编程中,它将允许开发人员进行单元测试。
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