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

ABAP TEST-SEAM 的使用方法

时间:2023-01-10 23:56:21浏览次数:40  
标签:SEAM price test ABAP seam TEST TYPE

语句 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, 该测试代码得以执行。

标签:SEAM,price,test,ABAP,seam,TEST,TYPE
From: https://www.cnblogs.com/sap-jerry/p/17041715.html

相关文章

  • 关于 ABAP 的运行时错误 ITAB_ILLEGAL_ORDER
    一个朋友在我的知识星球里提问:Jerry您好!请教一个问题,在生成物料凭证的时候,有个比较奇怪的问题,在函数MARD_MD_ARRAY_READ,第154行的时候会提示运行时错误:ITAB_ILLEG......
  • ABAP include structure 的一个具体用法
    在客户系统中使用appendstructure增强SAP结构或SAP表,这种行为并不构成修改(modification)。这一点在SAP官网得到确认。为客户系统中的SAP对象创建的附加结构,......
  • 如何手动通过增强的方式,给 SAP ABAP 数据库表增添新的字段
    有个朋友向我咨询关于SAP产品增强字段扩展(FieldExtensibility)的问题:Jerry,你好。看过你写的SAP产品增强FieldExtensibility文章,对扩展字段在物理数据库的结构还不......
  • 论文笔记:Symbolic Execution for Software Testing: Three Decades Later
    论文笔记:SymbolicExecutionforSoftwareTesting:ThreeDecadesLater这是一篇综述性质的文章,介绍了符号执行相关技术。1.Introduction2.OverviewofClassicalSy......
  • AtCoder Beginner Contest 133
    AtCoderBeginnerContest133https://atcoder.jp/contests/abc133A-TorT#include<bits/stdc++.h>usingnamespacestd;intmain(){inta,b,n;ci......
  • FunTester
    原文:​​https://xie.infoq.cn/article/f246b7f945928f5e48549b6d7​​FunTester测试框架项目结构图如下,在​​oker​​分支中用不到的包和类,我已经注释了。、base(基础类)......
  • Docker搭建测试用例平台 TestLink
    Testlink是基于WEB的测试用例管理系统,主要功能是:测试项目管理、产品需求管理、测试用例管理、测试计划管理、测试用例的创建、管理和执行,并且还提供了统计功能。Testlink......
  • AtCoder Beginner Contest 171
    A-αlphabet(abc171a)题目大意给定一个字母,其大写字母则输出A,否则输出a。解题思路isupper函数或者在'A'与Z之间即为大写字母。神奇的代码#include<bits/stdc+......
  • ABAP-MIGO的BAPI添加CODE
    在MIGO创建的BAPI(BAPI_GOODSMVT_CREATE)中需要输入一个货物移动分配事务代码只取在表T158G中添加MIGO的事务码,在使用BAPI时就可以传入这个值,不用去判断哪个值......
  • 日常开发记录-js的Date对象中的toLocaleDateString()
    就是把Date对象的日期部分转换为字符串,并返回结果。代码示例:console.log(newDate())//2023-01-10T05:42:41.926Zconsole.log(newDate().toLocaleDateString())//......