本文包含了我在开发项目中经历过的实用的ABAP单元测试指导方针。我把它们安排成为问答的风格,欢迎任何人添加更多的Q&A's,以完成这个列表。
html
class lcl_test definition for testing "#AU Duration Short inheriting from cl_aunit_assert. "#AU Risk_Level Harmless private section. methods test_xyz_simple_call for testing. endclass. class lcl_test implementation. method test_xyz_simple_call. * Setup parameters for the call... * Perform the call perform xyz using ... * Check returned values assert_equals( act = ... exp = ... ). endmethod. endclass.
固然,使用ABAP面向对象有不少好处,好比,会有ABAP类的单元测试模板的自动生成功能。一样地,生产代码和测试代码的分界会更清晰。测试类声生成在一个用于单元测试的“包含(incluede)”部分,会同其它内容隔离。若是出于某些缘由不须要使用这些类,你依然拥有单元测试支持。java
不,并无。为某些代码写单元测试会致使时间的浪费。它们是:数据库
要点在于:应该将它们设计的尽量简单。单元测试一样起着单元功能文档的做用。一样地,若是执行修改后,单元测试失败,会很容易从代码中看出哪一个功能失败了。尝试避免测试方法中的多余代码。将重复代码包装到方法中甚至宏之中,以保证在测试下功能的实质更加可读。直率地命名变量、方法、类和宏,使得代码在测试时尽量的具备表达力。单元的每一个特性,都须要能够按照如下三步测试:编程
class lcl_test definition deferred. class zcl_testee definition local friends lcl_test. ... class lcl_test definition for testing ... ...
class lcl_testee definition inheriting from zcl_someclass create public. endclass. ... class lcl_test implementation. method setup. create object go_testee type lcl_testee. endmethod. endclass.
记着,不管如何,问题不会由单元测试而是全局数据引发。单元测试只是发现问题,而不是致使问题。所以最佳的解决方式是排除类中的全局数据。api
assert_subrc( sy-subrc ).
call method cl_aunit_assert=>assert_subrc exporting act = sy-subrc.
method test_2_lief_2_pal. * Test assignment of deliveries to handling units _set_code: `1. Palette ( `, ` 1. Lieferung, 1. Pos, 50% `, ` ) `, `2. Palette ( `, ` 2. Lieferung, 2. Pos, Rest `, ` ) `. _call_parser. _assert_rows 'Pack data' gt_packdata_template 2. _assert_n_fields_in_row 'Pack data' gt_packdata_template 'exidv;vepos;vbeln;posnr;vemng;vemeh;unvel' : 1 'E1;1;1;1;50;!%;', 2 'E2;1;2;2;REST;;'. endmethod.
class lcl_test definition for testing "#AU Duration Short inheriting from cl_aunit_assert. "#AU Risk_Level Harmless ...
本文连接:http://www.cnblogs.com/hhelibeb/p/6038202.html数组
原文连接:ABAP Unit Best Practices 安全
2018.04.22更新:现有一个Open SAP的Writing Testable Code for ABAP 视频教程,推荐观看less