ABAP TEST-SEAM 的使用方法
方法 使用 ABAP test
2023-06-13 09:16:29 时间
语句 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 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
METHODS change_price
IMPORTING
!carrid TYPE sflight-carrid
!connid TYPE sflight-connid
!fldate TYPE sflight-fldate
!factor TYPE i
EXPORTING
VALUE(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 sflight
WHERE carrid = @carrid AND
connid = @connid AND
fldate = @fldate
INTO @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, 该测试代码得以执行。
相关文章
- 使用pycharm连接MySQL数据库的方法「建议收藏」
- Yzncms系列教程(九):自定义字段的使用方法
- adb出现adb server is out of date时的解决的方法「建议收藏」
- telnet 命令使用方法详解,telnet命令怎么用?[通俗易懂]
- 人工智能时代- 是时候改变学习方法了!
- Windows7 的 PAE (物理扩展内存)开启与关闭方法
- SAP ABAP Application Log 的使用方法
- SAP ABAP 一个有用的程序正确性辅助工具,Checkpoint group 的使用方法介绍试读版
- 【Groovy】Groovy 方法调用 ( 字符串切割 | 使用 Java 语法切割字符串 | 使用 Groovy 语法切割字符串直接为变量赋值 | 数组赋值给变量 变量个数小于等于数组长度 )
- Python IDLE使用方法详解(包含常用快捷键)
- kali linux 系统版本的查看方法
- JavaSE之Long 详解 Long的方法简介以及用法编程语言
- Oracle 等待事件 recovery read 官方解释,作用,如何使用及优化方法
- Oracle 等待事件 row cache lock 官方解释,作用,如何使用及优化方法
- Linux循环遍历目录的简单方法(linux循环目录)
- MongoDB连接池优势及其使用方法(mongodb连接池)
- Linux系统下模糊查找文件的方法(linux模糊查询文件)
- 可以用来干什么?Linux luit使用方法:用来实现更多任务(linuxluit)
- MySQL存储过程的概念与使用方法简介(mysql什么是存储过程)
- 使用MySQL数据库存储QQ聊天记录的方法(mysqlqq)
- Linux中的Radius服务器使用与配置方法(radiuslinux)
- MSSQL表中查询语句的使用方法(mssql 表 查询语句)
- Oracle数据库克隆字段数据实现方法(oracle克隆字段数据)
- MySQL 中 EXISTS 子句的使用方法详解(mysql中exsits)
- MySQL中使用EXEC命令的方法详解(mysql中 exec)
- MySQL中处理Blob大小的方法(mysql中blob大小)
- SQL2005使用专用管理员连接(DAC)的技巧及修改系统表的方法
- Android控件之ToggleButton的使用方法
- 网页防止tab键的使用快速解决方法
- c语言打印输出双引号的方法示例
- oracle10g全文索引自动同步语句使用方法
- node.js中的fs.fchown方法使用说明
- Django1.3添加app提示模块不存在的解决方法
- java和c#使用hessian通信的方法