ABAP单元测试的简单例子

ABAP的实际开发中还主要是面向过程的,除了设计界面时,实际当中使用类的地方真的屈指可数。发然发现ABAP可以使用单元测试,下面是个简单的例子。

假设程序中有一个get_attach_no方法,它负责从p_bktxt参数中获取其中包含的附件数。p_bktxt一般是类似“附件数 1”,函数的功能就是要将其中的1返回。

 1 report ztest. 
 2   
 3 start-of-selection. 
 4   
 5 form get_attach_no using p_bktxt type bktxt. 
 6     data: str_length type i, 
 7             start_pos type i, 
 8             attach_length type i. 
 9   
10     str_length = strlen( p_bktxt ). 
11   
12     " 标记1 
13   
14     search p_bktxt for '附件数'. 
15   
16     if sy-subrc = 0. 
17         start_pos = sy-fdpos. 
18         start_pos = start_pos + 3. 
19   
20         attach_length = str_length - start_pos. 
21   
22         if attach_length > 0. 
23             p_bktxt = p_bktxt+start_pos(attach_length). 
24             return. 
25         endif. 
26     endif. 
27   
28     p_bktxt = ''. 
29 endform.

这个程序明显有一个bug,就是当输入是空字符串“”或者是“附件数”这样的字符串,会出错,实际上我们希望能够返回空字符串。

按照之前的JUNIT的经验,如果要单元测试,首先写一个测试用例保证原来的功能没问题,再写一个测试用例来测试新出现的情况。

在写单元测试类时,必须要加上FOR TESTING,所有的测试方法都要放在private方法段里,其中的assert方法是cl_aunit_assert=> assert_equals,参数act是实际的值,exp是期望值,msg是用来报错时提示的。类的定义和实现如下:

 1 CLASS test DEFINITION FOR TESTING. 
 2   PRIVATE SECTION. 
 3         METHODS test_get_attach_no FOR TESTING. 
 4         METHODS test_get_attach_no_new FOR TESTING. 
 5 ENDCLASS. 
 6   
 7 CLASS test IMPLEMENTATION. 
 8     METHOD test_get_attach_no. 
 9         DATA: test_bktxt type bktxt. 
10         test_bktxt = '附件数 1'; 
11   
12         PERFORM get_attach_no using test_bktxt. 
13         cl_aunit_assert=>assert_equals( act = test_bktxt exp = '1' msg = '正常获取失败'). 
14     ENDMETHOD. 
15   
16     METHODS test_get_attach_no_new. 
17         DATA: test_bktxt type bktxt. 
18         test_bktxt = '附件数'; 
19   
20         cl_aunit_assert=>assert_equals( act = test_bktxt exp = '" msg = '空附件数获取失败'). 
21     ENDMETHOD. 
22 ENDCLASS.

第一个测试用例是 test_get_attach_no ,新增的功能的测试用例是 test_get_attach_no_new。开始运行时,程序一定会报一个错的,为了能够测试通过,在标记1位置增加以下这段就可以了。

1 if str_length <= 3. 
2     p_bktxt = ''. 
3     return. 
4 endif.
 
作者: chiefsailor | 版权声明: 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://www.chiefsailor.net/blog/2011/04/sap-abap-unit-test-example/
posted @ 2013-07-30 17:36  Shelwin的世界  阅读(1530)  评论(0编辑  收藏  举报