首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在经典的ABAP报告中使用ABAP单元测试吗?

我可以在经典的ABAP报告中使用ABAP单元测试吗?
EN

Stack Overflow用户
提问于 2012-10-06 04:08:34
回答 6查看 5.5K关注 0票数 11

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

这有可能吗?或者只针对OO类的ABAP单元?

我可以在子程序中使用它吗?

代码语言:javascript
复制
PERFORM get_date_range using sy-date changing lv_fromdate lv_todate.

附注:我是一个长期的Java开发人员,仍在学习ABAP。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-10-06 04:59:29

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

PERFORM <form> IN PROGRAM <prog>

然后验证你得到的结果。

编辑:

此外,SAP帮助说明了以下内容:

创建ABAP单元测试

ABAP单元测试在ABAP程序的本地测试类中以测试方法的形式实现,并使用辅助类CL_AUNIT_ASSERT的静态方法检查预期的结果。

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

在T。

票数 5
EN

Stack Overflow用户

发布于 2012-10-08 17:39:58

下面是一个包含单元测试的示例报告:

代码语言:javascript
复制
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.
票数 8
EN

Stack Overflow用户

发布于 2012-10-08 13:55:47

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

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

重要的是,单元测试被标记为FOR TESTING,并且至少有一个标记为FOR TESTING的方法。添加RISK LEVEL还将根据系统设置确定是否允许运行测试。(在编辑器中单击关键字F1可阅读更多内容)。

代码语言:javascript
复制
* 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.
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12753341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档