首页 > 其他分享 >ABAP TEST-SEAM 的使用方法

ABAP TEST-SEAM 的使用方法

时间:2023-01-16 10:08:34浏览次数:41  
标签:SEAM price test ABAP seam TEST TYPE

​​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 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 TEST-SEAM 的使用方法_单元测试

执行这个生产类的单元测试代码时,ABAP 框架执行到生产类代码的 selection 区块,检测到这个类的单元测试代码里定义了同名的 injection,于是就用测试代码 injection 区块里的代码块,替换原始的 selection 区块的代码进行执行。

如下图所示,第 16 行就是 名为 selection 的 TEST-INJECTION, 该测试代码得以执行。

ABAP TEST-SEAM 的使用方法_单元测试_02




标签:SEAM,price,test,ABAP,seam,TEST,TYPE
From: https://blog.51cto.com/jerrywangsap/6010042

相关文章

  • 如何手动通过增强的方式,给 SAP ABAP 数据库表增添新的字段
    ​​如何手动通过增强的方式,给SAPABAP数据库表增添新的字段​​ 有个朋友向我咨询关于SAP产品增强字段扩展(FieldExtensibility)的问题:Jerry,你好。看过你写的......
  • ABAP include structure 的一个具体用法
    ​​ABAPincludestructure的一个具体用法​​ 在客户系统中使用appendstructure增强SAP结构或SAP表,这种行为并不构成修改(modification)。这一点在SAP​......
  • Command line is too long. Shorten command line for TestMain or also for Applicat
       idea运行项目报错:Commandlineistoolong.ShortencommandlineforTestMainoralsoforApplicationdefault configuration.解决方法如下:   ......
  • AtCoder Beginner Contest 285
    A-EdgeChecker2(abc285a)题目大意给定如下一棵树。给定\(a,b(a<b)\),问两者是否有连边。解题思路观察数可发现其为二叉树,两者有连边当且仅当\(b=2a\)或\(b=2a......
  • gtest测试用例打印台内容重定向
    需求描述在使用gtest做测试时,有时候需要记录测试过程中,测试对象运行时打印在控制台的相关内容,并根据打印的内容做校验,判断用例是否通过。由于测试用例很多,我们希望能够......
  • axios_socketio_cros_test
    D:\code_gitee\html_crostest\htmo_crostest\index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><linkrel="icon"type="image/sv......
  • Atcoder Regular Contest ARC 153 A B C D 题解
    点我看题A-AABCDDEFE一个beautifulnumber是形如这样的:\(S1S1S3S4S5S5S7S8S7\)。如果选定了\(S1\),后面的数有100000种选法,所以先求出答案的\(S1\)。假设现在我们要求出......
  • Atcoder Regular Contest ARC 153 A B C D 题解
    点我看题A-AABCDDEFE一个beautifulnumber是形如这样的:\(S1S1S3S4S5S5S7S8S7\)。如果选定了\(S1\),后面的数有100000种选法,所以先求出答案的\(S1\)。假设现在我们要求出......
  • Atcoder Regular Contest ARC 153 A B C D 题解
    点我看题A-AABCDDEFE一个beautifulnumber是形如这样的:\(S1S1S3S4S5S5S7S8S7\)。如果选定了\(S1\),后面的数有100000种选法,所以先求出答案的\(S1\)。假设现在我们要求出......
  • How SQLite Is Tested
    https://www.sqlite.org/testing.html8.2. ValgrindValgrind isperhapsthemostamazingandusefuldevelopertoolintheworld.Valgrindisasimulator-its......