ABAP TEST-SEAM 的使用方法
语句 TEST-SEAM 引入了一个称为 seam 的测试 SEAM,它由 END-TEST-SEAM 关闭。 当前程序的测试类(test class)可以使用语句 TEST-INJECTION 将语句块 statement_block 替换为在那里定义的注入。如果没有对 test seam 执行注入,则执行原始代码。
test seam 具有以下属性:
- 可以在单个编译单元中定义多个 test seam,但每个 test seam 必须具有唯一的名称。
- 一般命名约定适用于名称接缝。
- test seam 不能嵌套,这意味着 test seam 不能包含更多 test seam.
- test seam 不能超出语句块的限制,但可以包含封闭的控制结构。
- test seam 可以包含数据声明。 这些声明在执行注入时不会被替换,并在其上下文中保持可见。
- test seam 可以在程序的全局声明部分定义,但不能在类的声明部分定义。
- test seam 可以是空的,也就是说,它不包含任何语句。 取而代之的是 injection.
- test seam 不能在测试类中定义。
test seam 的注入必须在同一个编译单元中定义。
只能在当前程序的测试包含中定义的测试类中创建注入。 测试包含目前只能在类池和函数池中使用。 这意味着 test seam 仅在类池和函数池中可行。
看个具体的例子。类 CL_DEMO_TEST_SEAMS 是生产代码。
CHANGE_PRICE 方法将数据库表 SFLIGHT 中的航班价格乘以一个系数,如果成功,则返回修改后的价格。如果数据库访问失败,将返回一个特定的无效值而不是计算后的价格。
为两个数据库访问定义了 test seam. 这使得在不访问实际数据的情况下运行单元测试成为可能。
生产类的完整源代码:
CLASS cl_demo_test_seams DEFINITIONPUBLICFINALCREATE PUBLIC .PUBLIC SECTION.METHODS change_priceIMPORTING!carrid TYPE sflight-carrid!connid TYPE sflight-connid!fldate TYPE sflight-fldate!factor TYPE iEXPORTINGVALUE(new_price) TYPE sflight-price .PROTECTED SECTION.PRIVATE SECTION.DATA subrc TYPE sy-subrc .
ENDCLASS.CLASS CL_DEMO_TEST_SEAMS IMPLEMENTATION.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method CL_DEMO_TEST_SEAMS->CHANGE_PRICE
* +-------------------------------------------------------------------------------------------------+
* | [--->] CARRID TYPE SFLIGHT-CARRID
* | [--->] CONNID TYPE SFLIGHT-CONNID
* | [--->] FLDATE TYPE SFLIGHT-FLDATE
* | [--->] FACTOR TYPE I
* | [<---] NEW_PRICE TYPE SFLIGHT-PRICE
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD change_price.DATA wa TYPE sflight.TEST-SEAM selection.SELECT SINGLE *FROM sflightWHERE carrid = @carrid ANDconnid = @connid ANDfldate = @fldateINTO @wa.subrc = sy-subrc.END-TEST-SEAM.IF subrc <> 0.new_price = -1.RETURN.ENDIF.wa-price = wa-price * factor / 100.TEST-SEAM modification.MODIFY sflight FROM @wa.subrc = sy-subrc.END-TEST-SEAM.IF subrc = 0.new_price = wa-price.ELSE.new_price = -2.ENDIF.ENDMETHOD.
ENDCLASS.
正常情况下,我们直接执行到 TEST-SEAM 定义的 selection 代码块内。
执行这个生产类的单元测试代码时,ABAP 框架执行到生产类代码的 selection 区块,检测到这个类的单元测试代码里定义了同名的 injection,于是就用测试代码 injection 区块里的代码块,替换原始的 selection 区块的代码进行执行。
如下图所示,第 16 行就是 名为 selection 的 TEST-INJECTION, 该测试代码得以执行。
ABAP TEST-SEAM 的使用方法相关推荐
- 在ABAP中将负号提前的方法
在ABAP中将负号提前的方法 第一种: PERFORM. change_qty USING l_srqty CHANGING it_inv-srqty. FORM. change_qty USING ...
- 解除ABAP程序编辑锁的方法
方法1:在已有SE38创建修改权限的情况下 REPORT ZUNLOCK.TABLES: TRDIR. "System table TRDIRPARAMETERS: PROGRAM LIKE ...
- ABAP动态取得数据的方法
ABAP动态查询的实现:可以完全实现动态查询,每个字段都可以动态. (1) 利用宏 (2) 利用abap指针 (3) 利用FIELD-SYMBOL 具体实现: ...
- 最浅显易懂的 SAPGUI 里 ABAP 调试器的使用方法介绍
本文介绍 SAPGUI 里 ABAP 调试器的用法.我们编写的 ABAP 程序,如果执行遇到问题,可以使用 ABAP 调试器,采用单步排错的方式进行调试. 我们使用下面这个简单的 ABAP 程序作为例 ...
- ABAP workbench API的使用方法
该报表演示了如何用ABAP代码实现SE80事务码里的资源创建工作. REPORT ZCREATE. data: lr_tool TYPE REF TO ZCL_PRODUCT_WB_ACCESS,lr ...
- GS01创建信息集及其他GROUP在ABAP程序中的调用方法
1.函数'G_SET_GET_ALL_VALUES'使用 实例 DATA: t_set_values TYPE TABLE OF rgsb4. DATA: wa_set_values LIKE LIN ...
- abap中ROUND 函数使用方法
文章目录 1 Introduction 2 Code Example 1 Introduction ROUND Function is rounding up, rounding down. it i ...
- ABAP 行列转换的方法
正文部分 有人问:马蹄能给个行列转换的例子吗 我:百度很多吧,找找看 回:百度来的没看懂啊 我:好吧,写个例子 很久没用在博客里发代码了,发个行列转换的例子 其实理解原理就好,就是获取到行,然后动态的 ...
- 面向对象的 ABAP 编程初探 - 什么是类,实例,和 Public 方法
本教程前面的文章ABAP 如何解析 JSON 数据 我们介绍了 SAP 提供的一个工具类 /UI2/CL_JSON,用于进行 JSON 格式的数据读取. 打开事物码 SE24,这是 SAP ABAP ...
- 《SAP ABAP 开发入门》课程正式发布
首先,课程还没有全部做完,这次课程采用的是连载的方式,目前已经完成第二章共计8个课时.以后打算每周至少更新2个课时,在每周三和周六必定更新.当然如果时间允许的话,我会加快课程的制作. 课程购买地址 & ...
最新文章
- [zz]用U盘装win7/XP系统的操作[图解]
- PHP写sqlserver事务,php调用sqlserver存储过程使用事务处理
- js 获取url多个参数
- java字节码运行原理_JVM 内部原理(六)— Java 字节码基础之一
- 挂载硬盘问题:mount: wrong fs type, bad option, bad superblock on /dev/sdb,
- usb连接不上 艾德克斯电源_STM32F7 电源控制器(PWR)
- Java 方法使用final 修饰参数的作用
- python3编码(encode,decode)
- 计算机中是如何存储图片的,电脑如何保存图片
- ubuntu18.04下载显卡驱动+CUDA+CUDNN
- 怎么把图片用手机进行压缩?来试试这两个工具
- Livezilla安装配置, APE(Ajax Push Engine)安装配置
- 测试基础知识1 》》软件测试入门
- html+css+js制作点名器
- 伪元素写竖线_[CSS] 用伪元素:after实现分割线和气泡
- Python:爬山法/随机重启爬山法/允许侧移的爬山法解决八皇后问题
- 数字电路基础知识——乘法器的设计(二)( 串行、流水线、有符号数八位乘法器)
- 360个人图书馆 轻松解除网页防复制
- Unity制作RPG游戏——战斗注视LockOn实现方法
- 读书感受 之 《AI·未来》