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

Dav*_*son 10 abap unit-testing

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

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

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

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

Ren*_*ené 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.
Run Code Online (Sandbox Code Playgroud)

  • 感谢您提供其他示例。我非常感谢您的努力。而且,是的,你确实理解了这个问题。 (2认同)

myd*_*rms 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.
Run Code Online (Sandbox Code Playgroud)


tom*_*uyt 5

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

PERFORM <form> IN PROGRAM <prog>

然后验证您返回的结果。

编辑:

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

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

T。

  • 当您的测试类在报告中本地定义和实现时(在报告的末尾或在单独的包含中),您可以直接从中调用 PERFORM,而无需 IN PROGRAM(FORM 例程在程序中是全局的)。您还可以通过将本地测试类添加到功能组来为功能模块编写测试类。 (4认同)