cds view 是一个core data service, 能够将数据库表虚拟化为一个虚拟表(double)。因为各个使用sap的公司,使用的数据库数据是不同的,所以提供一个数据库的虚拟。  通过向虚拟double test里面插入数据,进行unit test。 下面是主要步骤。

准备一个数据表 ztest_view

1: 首先在装有abap development tool 的eclipse软件中,在自己的目录下创建一个cds view。

目录》右键》new abap repository object》选择core data service 下面的data definition(老版本是dictionary 下面的的ddl source)。

2: 给定一个cds view 名字和描述,点击finish完成,创建好了一个cds view 工程。然后进行编辑该cds view.

3: 给cds view 指定数据库表(一个或多个),图中的ztest_view就是一个数据库表,指定cds view的字段(也是数据库中的字段,图中的id,name),可以给定字段别名。也就是将数据表的字段封装成为 cds view的字段。

4: 在该页空白处,右键 》open with>data preview。即可查看到该cds view所封装的数据库的数据

5:点击上图的sql console 可以看到查询sql,可以对其进行编辑等。

6:上述操作完成,即完成cds view的创建,需要写程序去consume创建的cds view.

二:创建类调用 cds view ,对其进行测试。

1:首先创建一个类  ZCL_TEST_CDS_VIEW01 ,并创建一个方法 GET_NAME_BY_ID。该方法对cds view 进行查询。

使用如下代码:

  method GET_NAME_BY_ID.

*      SELECT SINGLE ZHANSEN_CDS_VIEW01~RETURNNAME FROM ZHANSEN_CDS_VIEW01 WITH PRIVILEGED ACCESS
*        WHERE ZHANSEN_CDS_VIEW01~QUERYid = @iv_id
*        INTO @ev_name.
    SELECT SINGLE ZHANSEN_CDS_VIEW01~name FROM ZHANSEN_CDS_VIEW01
      WHERE ZHANSEN_CDS_VIEW01~id = @iv_id
      INTO @ev_name.
  endmethod.

2:创建测试类: 在创建的类上面,右键》create》generate test class.

3: continue

4: 双击 文本框右边的 白色小框,给定测试类一个名字。 continue

5: 选中 要测试的方法,continue,直到完成。测试类创建成功。

6: 创建测试方法Test_Name_By_Id, 该方法中直接调用 get_name_by _id

*"* use this source file for your ABAP unit test classes

class ztcl_Test_Cds_View01 definition for testing  "测试类
  duration short
  risk level harmless
.

  private section.
    data:
      f_Cut type ref to ZCL_TEST_CDS_VIEW01.  "class under test, 原来的类
      CLASS-DATA lv_cds_test_environment TYPE REF TO if_cds_test_environment.  "测试环境。
    CLASS-METHODS: class_setup.  "类初始化,每次类执行时,该方法执行
    CLASS-METHODS: class_teardown. "每次类关闭时,该方法执行。
    METHODS: setup.  "方法执行时调用, 每次有方法执行时,该方法执行。
    METHODS: teardown.  "方法执行完调用, 每次方法执行完后,该方法会被调用。
    methods: Test_Name_By_Id for testing. "测试类中的方法。

endclass.       "ztcl_Test_Cds_View01

class ztcl_Test_Cds_View01 implementation. "实现类。
  METHOD class_setup.
    lv_cds_test_environment = cl_cds_test_environment=>create( i_for_entity      = 'ZHANSEN_CDS_VIEW01'  "初始化测试环境,一旦该环境创建之后,就不会查询数据库了。无论是否向cds view中添加数据
                                                         test_associations = 'X'  ).  "initial the cds test environment
  ENDMETHOD.
  METHOD class_teardown.
    lv_cds_test_environment->destroy( ).
  ENDMETHOD.
  METHOD setup.
    CREATE OBJECT f_cut.
  ENDMETHOD.
  METHOD teardown.
    lv_cds_test_environment->clear_doubles( ).
  ENDMETHOD.

  method Test_Name_By_Id.

    data lt_TEST_DATA TYPE STANDARD TABLE OF ZTEST_VIEW.
    ) '.
    ) TYPE C.
    "准备数据,向cds view中插入的数据。
    lt_TEST_DATA = VALUE #(
                           ( id = ' name = 'lisi' )  " the first data adds to cds view
                           ( id = ' name = 'zhaoliu' )  " other data with same name will be abandoned.
                           ).
    lv_cds_test_environment->insert_test_data( i_data = lt_TEST_DATA ).  "向cds view中插入数据。

    CALL METHOD f_cut->get_name_by_id(  "调用 方法
      EXPORTING
        iv_id   = lv_id
      IMPORTING
        ev_name = lv_name ).
    cl_abap_unit_assert=>assert_equals( act = lv_name  "断言。
      exp = 'lisi'
      msg = 'the name is not expected!' ).
  endmethod.
endclass.

以下代码,直接从数据库中进行取出数据。这时不能有:

    lv_cds_test_environment = cl_cds_test_environment=>create( i_for_entity      = 'ZHANSEN_CDS_VIEW01'  "初始化测试环境,一旦该环境创建之后,就不会查询数据库了。无论是否向cds view中添加数据,都会只查询cds view.
                                                         test_associations = 'X'  ).  "initial the cds test environment
*"* use this source file for your ABAP unit test classes

class ztcl_Test_Cds_View01 definition for testing
  duration short
  risk level harmless
.

  private section.
    data:
      f_Cut type ref to ZCL_TEST_CDS_VIEW01.  "class under test
      CLASS-DATA lv_cds_test_environment TYPE REF TO if_cds_test_environment.
    METHODS: setup.
    methods: Test_Name_By_Id for testing.

endclass.       "ztcl_Test_Cds_View01

class ztcl_Test_Cds_View01 implementation.
  METHOD setup.
    CREATE OBJECT f_cut.
  ENDMETHOD.
  method Test_Name_By_Id.

    data lt_TEST_DATA TYPE STANDARD TABLE OF ZTEST_VIEW.
    ) '.
    ) TYPE C.

    CALL METHOD f_cut->get_name_by_id(
      EXPORTING
        iv_id   = lv_id
      IMPORTING
        ev_name = lv_name ).
    cl_abap_unit_assert=>assert_equals( act = lv_name
      exp = 'lisi'
      msg = 'the name is not expected!' ).
  endmethod.
endclass.

cds view:   @AbapCatalog.sqlViewName: 'CDS_VIEW01'   改名字在se11下面查找 cds view

https://www.jianshu.com/p/44b0fd2ef5bc

问题:当 一个测试方法中使用了多个cds veiw时,需要创建一个多cds view的测试环境

   go_cds_test_environment ?= cl_cds_test_environment=>create_for_multiple_cds( i_for_entities      = VALUE #(
        ( i_for_entity = 'I_RESPYMGMTTEAMHEADER'       i_select_base_dependencies = abap_true  i_dependency_list = VALUE #( ( 'P_RespyMgmtTeamHeader' ) ) )
        ( i_for_entity = 'I_RESPYMGMTTEAMATTRIBUTE'    i_select_base_dependencies = abap_true  i_dependency_list = VALUE #( ( 'hrp7731')
                                                                                                                            ( 'hrt7731') ) )
        ( i_for_entity = 'P_RESPYMTEAMMEMBERFUNCBASIC' i_select_base_dependencies = abap_true  i_dependency_list = VALUE #( ( 'P_RespyMgmtRelationships' )
                                                                                                                            ( 'hrp7732') ) )
        ( i_for_entity = 'I_RESPYMGMTBPWITHUSER'       i_select_base_dependencies = abap_true  i_dependency_list = VALUE #( ( 'P_RespyMgmtBPWithUser' ) ) )
    ) ).

这样就能在以上4个cds view的数据库中添加数据。

cds view 创建和调用的更多相关文章

  1. cds view join和association

    1:创建两张表:ztt_teacher01 和ztt_teacher02 用于 cds view中的join和association 2:创建两个cds view:ztt_teacher01_id_n ...

  2. iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用

    一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPicke ...

  3. Android应用程序中的多个Activity的显示创建和调用

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTkzNjE0Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  4. # 2017-2018-2 20155228 《信息安全系统设计原理》 使用VirtualStudio2008创建和调用静态库和使用VirtualC++6.0创建和调用动态库

    使用virtual c++ 6.0创建和调用动态库 不得不说一下关于环境的问题 只要我打一个响指,一半的安装在win7上的VC6.0都会因为兼容性问题直接崩掉 懒得研究怎么解决兼容性的问题了,直接开一 ...

  5. 如何用ABAP代码读取CDS view association的数据

    我有如下一个CDS view, 这个view的数据来自CRMD_ORDERADM_H, 定义了一个名称为_statushelp的association, 指向了另一个CDS view Z_C_Stat ...

  6. mysql 存储过程、视图---创建、调用、删除

    之前一直用的是Sql Server数据库,最近偶然机会接触到mysql.这里总结了关于mysql 存储过程.视图的“创建.调用.删除”示例 ============================== ...

  7. 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务

    Jerry 2016年在学习SAP CDS view时,曾经写过一个CDS view的自学系列,其中有一篇提到了一个很方便的注解: @OData.publish: true 加上这个注解的CDS vi ...

  8. 基础总结篇之八:创建及调用自己的ContentProvider

    转自:http://blog.csdn.net/wellsoho/article/details/49494141 若不能坚持到底,即使是朽木也不能折断:只要坚持不停地用刀刻,就算是金属玉石也可以雕出 ...

  9. C/C++中动态链接库的创建和调用

    DLL 有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.下面为你介绍C/C++中动态链接库的创建和调用. 动态连接库的 ...

随机推荐

  1. 【Spark深入学习 -16】官网学习SparkSQL

    ----本节内容-------1.概览        1.1 Spark SQL        1.2 DatSets和DataFrame2.动手干活        2.1 契入点:SparkSess ...

  2. 备份与还原ORACLE数据库(通过CMD命令执行)

    31.1:(若用程序调用cmd,则在备份和还原 末尾语句加上 2>&1 ,直接运行则不需要加) --备份:     1) exp SA/"""abc@123 ...

  3. URLSearchParams和axios的post请求(防忘记)

    import axios from 'axios' Vue.prototype.axios = axios mounted () { let params = new URLSearchParams( ...

  4. BrainFuck 指令

    BrainFuck只有八条指令: 指令 含义 等价的C代码 > 指针加一 ++ptr; < 指针减一 --ptr; + 指针指向的字节的值加一 ++*ptr; - 指针指向的字节的值减一 ...

  5. 资源查找器PathMatchingResourcePatternResolver的使用

    资源查找器PathMatchingResourcePatternResolver的使用 PathMatchingResourcePatternResolver是一个Ant通配符模式的Resource查 ...

  6. .NET Core 2.1中的HttpClientFactory最佳实践

    ASP.NET Core 2.1中出现一个新的HttpClientFactory功能, 它有助于解决开发人员在使用HttpClient实例从其应用程序发出外部Web请求时可能遇到的一些常见问题. 介绍 ...

  7. [Z] C#程序中设置全局代理(Global Proxy)

    https://www.cnblogs.com/Javi/p/7274268.html 1. HttpWebRequest类的Proxy属性,只要设置了该属性就能够使用代理了,如下: 1        ...

  8. 【微信开发】cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

    在做微信开发时候,请求为你接口报错: 解决方案: 1 下载cacert https://curl.haxx.se/ca/cacert.pem 2 修改 php.ini , 并重启 curl.cainf ...

  9. oracle如何通过cmd导出某个用户下的所有表

    1:如果要导入的用户下有空表,需要执行下面语句 select 'alter table '||table_name||' allocate extent;' from user_tables wher ...

  10. Tcp/IP 的四层模型

    维基:https://zh.wikipedia.org/wiki/TCP/IP%E5%8D%8F%E8%AE%AE%E6%97%8F 因特网协议组 LITA 因特网协议组 Link  网络接口层 以太 ...