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/