亚洲必赢手机CDS测试框架介绍:如何也ABAP CDS Entities写测试。CDS测试框架介绍:如何呢ABAP CDS Entities写测试。

by admin on 2018年11月15日

动机

今昔大家都了解单元测试对咱代码的利益。并且我们且认可它是出进程被不可或缺的如出一辙有的。但是以拿代码切换至数据库的模式下的时,我们受狂暴地自回了软件测试的黑暗年代…我们今天面临着逻辑下推动到ABAP
CDS entities后,代码要怎么测试
的难题。

CDS Test Double Framework允许开发者们经过明确的ABAP Unit Test
Framework自动化地测试CDS entities。

本文链接:http://www.cnblogs.com/hhelibeb/p/7376232.html

英文原文:Introduction to CDS Test Double Framework – How to write unit
tests for ABAP CDS
Entities?

动机

而今大家还晓得单元测试对咱代码的好处。并且我们且认同其是付出进程被必备的同有。但是在把代码切换至数据库的模式下之当儿,我们给粗鲁地从回了软件测试的黑暗年代…我们现在面临着逻辑下推动到ABAP
CDS entities后,代码要什么测试
的难题。

CDS Test Double Framework允许开发者们通过明确的ABAP Unit Test
Framework自动化地测试CDS entities。

本文链接:http://www.cnblogs.com/hhelibeb/p/7376232.html

英文原稿:Introduction to CDS Test Double Framework – How to write unit
tests for ABAP CDS
Entities?

挑战

坐CDS entity中之逻辑运行于下层之数据库被(独立为abap
runtime),使用传统的ABAP依赖注入解决方案以实现测试成为了非可能的事体。entity的倚组件需要在数据库被长测试替身,并且我们须确保CDS
entity测试的当儿数据库引擎调用/执行这些测试替身(double)。

为可以在CDS entity under test
(CUT)遭遇可是控地测试逻辑,我们要通过测试替身注射测试专用数据。这象征必须用测试数据插入到测试替身中,这样数据可以在CUT执行时于测试替身们回到。对于以ABAP
CDS上下文中颇具固有之单独念属性的依赖组件(比如数据库视图和数据库函数),这是如出一辙件特别的挑战。

正文中重大的亚洲必赢手机缩写:

CUT = CDS entity Under
Test

DOC = Depended-On
Component

挑战

坐CDS entity中的逻辑运行于下层之数据库被(独立为abap
runtime),使用传统的ABAP依赖注入解决方案以落实测试成为了无可能的工作。entity的拄组件得在数据库被长测试替身,并且我们得确保CDS
entity测试的当儿数据库引擎调用/执行这些测试替身(double)。

以可以当CDS entity under test
(CUT)蒙不过控地测试逻辑,我们用经测试替身注射测试专用数据。这表示要以测试数据插入到测试替身中,这样数据足以于CUT执行时叫测试替身们返回。对于在ABAP
CDS上下文中有着固有之单读属性的依赖组件(比如数据库视图和数据库函数),这是如出一辙桩专门之挑战。

正文中至关重要的缩写:

CUT = CDS entity Under
Test

DOC = Depended-On
Component

CDS Test Double Framework

CDS Test Double Framework处理了以上的挑战,并且可兑现CDS
entities测试的自动化:

  1. 每当同等的Database
    Schema遭呢每个依赖组件创建临时的但更新测试替身

    1. 复制依赖组件表,但不复制任何数。不复制依赖数据库表的主键约束。这允许你轻轻松松地栽测试数据,而休用担心数据的完整性。相似之,数据库索引也未会见被复制。
    2. 否乘数据库视图创建数量库表。这些发明有与靠数据库视图相同之结构。
    3. 倚数据库functions(由带有参数的赖CDS视图和依赖表function产生)会被复制,并且function的测试替身实现会晤叫改为允许插入需要之测试数据。
  2. 在平的Database Schema创建一个CDS entity under
    test(CUT)的即副本。从各种意义上来拘禁,这个副本是为CUT服务的。在原的CDS
    entity中落实之逻辑在副本中一律存在,但是靠组件为替换为呼应的测试替身。测试替身是出于我们的CDS
    Test Double Framework所创的。

亚洲必赢手机 1

CDS Test Double Framework

CDS Test Double Framework处理了上述之挑战,并且可实现CDS
entities测试的自动化:

  1. 以同一之Database
    Schema遭遇吗每个依赖组件创建临时之而更新测试替身

    1. 复制依赖组件表,但不复制任何数据。不复制依赖数据库表的主键约束。这允许而轻轻松松地插测试数据,而无用担心数据的完整性。相似的,数据库索引也未会见被复制。
    2. 为负数据库视图创建数量库表。这些发明有与凭借数据库视图相同的布局。
    3. 赖数据库functions(由带有参数的依赖性CDS视图和凭借表function产生)会受复制,并且function的测试替身实现会晤叫改动为允许插入需要的测试数据。
  2. 以平的Database Schema创建一个CDS entity under
    test(CUT)的即副本。从各种意义上来拘禁,这个副本是吧CUT服务的。在原来的CDS
    entity中落实之逻辑在副本中一律存在,但是依靠组件为替换为呼应的测试替身。测试替身是由于咱们的CDS
    Test Double Framework所创造的。

亚洲必赢手机 2

测试什么?

单元测试应当注意于由一个叫定视图实现的发出价的效能定义。不是具有的CDS视图都得一个单元测试。在落实单元测试之前,建议辨别出entity中以及测试有关的点。

一般,需要为一些含有了代码下推的道的entity进行单元测试。潜在的测试候选者包括:

Calculations and/or filters, conversions, conditional expressions 比如
CASE…THEN…ELSE or COALESCE, type changing CAST operations, cardinality
changes or checks against NULL values,  JOIN behavior, complex where
conditions 等.

单元测试不利用叫测试那些更适用于静态检查、集成测试相当技巧之CDS
entities属性。如果非克起单元测试中取得其他价值之说话,也未承诺开展其,比如对于那些简单的CDS投影视图。

测试什么?

单元测试应当注意让由一个于定视图实现之有价的效果定义。不是具备的CDS视图都急需一个单元测试。在实现单元测试之前,建议辨别出entity中与测试有关的端。

习以为常,需要为一些含有了代码下推的点子的entity进行单元测试。潜在的测试候选者包括:

Calculations and/or filters, conversions, conditional expressions 比如
CASE…THEN…ELSE or COALESCE, type changing CAST operations, cardinality
changes or checks against NULL values,  JOIN behavior, complex where
conditions 等.

单元测试不动叫测试那些还适用于静态检查、集成测试等技术的CDS
entities属性。如果无克起单元测试中赢得其它价值之说话,也不答应进行其,比如对那些简单的CDS投影视图。

怎么样用CDS Test Double Framework写单元测试?

于生有些,我们见面经给广泛应用的ABAP Unit Test
Framework为以下的CDS视图创建单元测试。

@AbapCatalog.sqlViewName: 'zSo_Items_By_1'
@EndUserText.label: 'Aggregations/functions in SELECT list'
@AbapCatalog.compiler.compareFilter: true
define view Salesorder_Items_By_TaxRate
as select from CdsFrwk_Sales_Order_Item
association [1] to snwd_so as _sales_order on so_guid = _sales_order.node_key
{
so_guid,
coalesce ( _sales_order.so_id, '9999999999' ) as so_id,
currency_code,
sum( gross_amount ) as sum_gross_amount,
tax_rate,
_sales_order
}
group by
so_guid,
_sales_order.so_id,
currency_code,
tax_rate

何以利用CDS Test Double Framework写单元测试?

在生部分,我们会经过为广泛应用的ABAP Unit Test
Framework为以下的CDS视图创建单元测试。

@AbapCatalog.sqlViewName: 'zSo_Items_By_1'
@EndUserText.label: 'Aggregations/functions in SELECT list'
@AbapCatalog.compiler.compareFilter: true
define view Salesorder_Items_By_TaxRate
as select from CdsFrwk_Sales_Order_Item
association [1] to snwd_so as _sales_order on so_guid = _sales_order.node_key
{
so_guid,
coalesce ( _sales_order.so_id, '9999999999' ) as so_id,
currency_code,
sum( gross_amount ) as sum_gross_amount,
tax_rate,
_sales_order
}
group by
so_guid,
_sales_order.so_id,
currency_code,
tax_rate

创建ABAP测试类

开创一个ABAP测试类以对CDS视图进行单元测试。有一个吓之履措施:为测试类起一个同CUT相同/相似的名,并且增长TEST的后缀。比如,对于CDS视图Salesorder_Items_By_TaxRate,测试类的名可以是:Salesorder_Items_By_TaxRate_Test.

以单元测试和CDS是见仁见智之物,相同/相似的讳可以帮忙我们轻松的寻相关的测试。

CLASS Salesorder_Items_By_TaxRate_Test DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
...
...
ENDCLASS.

CLASS SO_ITEMS_BY_TAXRATE_TEST IMPLEMENTATION.
...
...
ENDCLASS.

创建ABAP测试类

创一个ABAP测试类以对CDS视图进行单元测试。有一个吓的推行措施:为测试接近起一个同CUT相同/相似之名,并且增长TEST的后缀。比如,对于CDS视图Salesorder_Items_By_TaxRate,测试类的名可以是:Salesorder_Items_By_TaxRate_Test.

盖单元测试和CDS是见仁见智的物,相同/相似之名可以辅助我们轻松的寻相关的测试。

CLASS Salesorder_Items_By_TaxRate_Test DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
...
...
ENDCLASS.

CLASS SO_ITEMS_BY_TAXRATE_TEST IMPLEMENTATION.
...
...
ENDCLASS.

概念固定方式

概念以下的装拆卸方法。

运行方式cl_cds_test_environment=>create( i_for_entity =
‘<CDS under test>’
)
,隐式地于数据库中创造有因组件测试替身。这个方式以测试类吃只有答应给调用一次等。

"Fixture method class_setup is executed only once in the beginning of the execution of test class
METHOD class_setup.
"For parameter i_for_entity, specify the CDS view to be unit tested. This will create all the depended-on component Test doubles in the database.
environment = cl_cds_test_environment=>create( i_for_entity = 'Salesorder_Items_By_TaxRate' ).
ENDMETHOD.

METHOD class_teardown.
environment->destroy( ).
ENDMETHOD.

"Fixture method setup is executed once before each test method execution
<cod
METHOD setup.
environment->clear_doubles( ).
ENDMETHOD.

概念固定方式

概念以下的设置拆卸方法。

运转方式cl_cds_test_environment=>create( i_for_entity =
‘<CDS under test>’
)
,隐式地于数据库中创造有因组件测试替身。这个艺术以测试类中特承诺受调用一浅。

"Fixture method class_setup is executed only once in the beginning of the execution of test class
METHOD class_setup.
"For parameter i_for_entity, specify the CDS view to be unit tested. This will create all the depended-on component Test doubles in the database.
environment = cl_cds_test_environment=>create( i_for_entity = 'Salesorder_Items_By_TaxRate' ).
ENDMETHOD.

METHOD class_teardown.
environment->destroy( ).
ENDMETHOD.

"Fixture method setup is executed once before each test method execution
<cod
METHOD setup.
environment->clear_doubles( ).
ENDMETHOD.

概念单元测试方法

METHOD cuco_1_taxrate_1_item_1_ok.

ENDMETHOD.

概念单元测试方法

METHOD cuco_1_taxrate_1_item_1_ok.

ENDMETHOD.

备输入——在测试替身中插测试数据

METHOD cuco_1_taxrate_1_item_1_ok.

"Step 1 : Insert testdata into the doubles
"Step 1.1 : create an instance of type snwd_so. Note : CDS view Salesorder_Items_By_TaxRate depends on snwd_so.
sales_orders = VALUE #( ( client = sy-mandt node_key = '01' so_id = 'ID' ) ).

"Step 1.2 : Use the framework method CL_CDS_TEST_DATA=>create(..) to create the test_data object
test_data = cl_cds_test_data=>create( i_data = sales_orders ).

"Step 1.3 : Use the framework method environment->get_double(..) to create the instance of the double 'SNWD_SO'
DATA(sales_orders_double) = environment->get_double( i_name = 'SNWD_SO' ).

"Step 1.4 : Insert the testdata into the double depended-on component object
sales_orders_double->insert( test_data ).

"Repeat Step 1 for all the depended-on component doubles
sales_order_items = VALUE #( ( mandt = sy-mandt so_guid = '01' currency_code = 'EUR' gross_amount = '1' tax_rate = '19.00' ) ).
test_data = cl_cds_test_data=>create( i_data = sales_order_items ).
DATA(sales_order_items_double) = environment->get_double( i_name = 'CdsFrwk_DEMO_1' ).
sales_order_items_double->insert( test_data ).

...

ENDMETHOD.

预备输入——在测试替身中插测试数据

METHOD cuco_1_taxrate_1_item_1_ok.

"Step 1 : Insert testdata into the doubles
"Step 1.1 : create an instance of type snwd_so. Note : CDS view Salesorder_Items_By_TaxRate depends on snwd_so.
sales_orders = VALUE #( ( client = sy-mandt node_key = '01' so_id = 'ID' ) ).

"Step 1.2 : Use the framework method CL_CDS_TEST_DATA=>create(..) to create the test_data object
test_data = cl_cds_test_data=>create( i_data = sales_orders ).

"Step 1.3 : Use the framework method environment->get_double(..) to create the instance of the double 'SNWD_SO'
DATA(sales_orders_double) = environment->get_double( i_name = 'SNWD_SO' ).

"Step 1.4 : Insert the testdata into the double depended-on component object
sales_orders_double->insert( test_data ).

"Repeat Step 1 for all the depended-on component doubles
sales_order_items = VALUE #( ( mandt = sy-mandt so_guid = '01' currency_code = 'EUR' gross_amount = '1' tax_rate = '19.00' ) ).
test_data = cl_cds_test_data=>create( i_data = sales_order_items ).
DATA(sales_order_items_double) = environment->get_double( i_name = 'CdsFrwk_DEMO_1' ).
sales_order_items_double->insert( test_data ).

...

ENDMETHOD.

执行CDS

SELECT * FROM cdsfrwk_so_items_by_taxrate INTO TABLE @act_results.

执行CDS

SELECT * FROM cdsfrwk_so_items_by_taxrate INTO TABLE @act_results.

证明输出——使用ABAP单元测试的预言

exp_results = VALUE #( ( so_id = 'ID' currency_code = 'EUR' sum_gross_amount = '1' tax_rate = '19.00' ) ).
cl_abap_unit_assert=>assert_equals(
act = lines( act_results )
exp = lines( exp_results ) ).

"The method looks as follows:

METHOD cuco_1_taxrate_1_item_1_ok.

"Step 1 : Insert testdata into the doubles
"Step 1.1 : create an instance of type snwd_so
sales_orders = VALUE #( ( client = sy-mandt node_key = '01' so_id = 'ID' ) ).

"Step 1.2 : Use the framework method CL_CDS_TEST_DATA=>create to create the test_data object
test_data = cl_cds_test_data=>create( i_data = sales_orders ).

"Step 1.3 : Use the framework method environment->get_double to the instance of the DOC double 'SNWD_SO'
DATA(sales_orders_double) = environment->get_double( i_name = 'SNWD_SO' ).

"Step 1.4 : Insert the testdata into the DOC double object
sales_orders_double->insert( test_data ).

"Repeat Step 1 for all the DOC doubles
sales_order_items = VALUE #( ( mandt = sy-mandt so_guid = '01' currency_code = 'EUR' gross_amount = '1' tax_rate = '19.00' ) ).
test_data = cl_cds_test_data=>create( i_data = sales_order_items ).
DATA(sales_order_items_double) = environment->get_double( i_name = 'CdsFrwk_DEMO_1' ).
sales_order_items_double->insert( test_data ).

"Step 2 : Execute the CDS
SELECT * FROM cdsfrwk_so_items_by_taxrate INTO TABLE @act_results.

"Step 3 : Verify Expected Output
exp_results = VALUE #( ( so_id = 'ID' currency_code = 'EUR' sum_gross_amount = '1' tax_rate = '19.00' ) ).
assert_so_items_by_taxrate( exp_results = exp_results ).

ENDMETHOD.

证实输出——使用ABAP单元测试的预言

exp_results = VALUE #( ( so_id = 'ID' currency_code = 'EUR' sum_gross_amount = '1' tax_rate = '19.00' ) ).
cl_abap_unit_assert=>assert_equals(
act = lines( act_results )
exp = lines( exp_results ) ).

"The method looks as follows:

METHOD cuco_1_taxrate_1_item_1_ok.

"Step 1 : Insert testdata into the doubles
"Step 1.1 : create an instance of type snwd_so
sales_orders = VALUE #( ( client = sy-mandt node_key = '01' so_id = 'ID' ) ).

"Step 1.2 : Use the framework method CL_CDS_TEST_DATA=>create to create the test_data object
test_data = cl_cds_test_data=>create( i_data = sales_orders ).

"Step 1.3 : Use the framework method environment->get_double to the instance of the DOC double 'SNWD_SO'
DATA(sales_orders_double) = environment->get_double( i_name = 'SNWD_SO' ).

"Step 1.4 : Insert the testdata into the DOC double object
sales_orders_double->insert( test_data ).

"Repeat Step 1 for all the DOC doubles
sales_order_items = VALUE #( ( mandt = sy-mandt so_guid = '01' currency_code = 'EUR' gross_amount = '1' tax_rate = '19.00' ) ).
test_data = cl_cds_test_data=>create( i_data = sales_order_items ).
DATA(sales_order_items_double) = environment->get_double( i_name = 'CdsFrwk_DEMO_1' ).
sales_order_items_double->insert( test_data ).

"Step 2 : Execute the CDS
SELECT * FROM cdsfrwk_so_items_by_taxrate INTO TABLE @act_results.

"Step 3 : Verify Expected Output
exp_results = VALUE #( ( so_id = 'ID' currency_code = 'EUR' sum_gross_amount = '1' tax_rate = '19.00' ) ).
assert_so_items_by_taxrate( exp_results = exp_results ).

ENDMETHOD.

运作CDS的单元测试

在ADT高中档,打开包含有CDS单元测试的ABAP测试类。右键选择Run
As->ABAP Unit
Test,或者采用ctrl+shift+f10组合键来运行单元测试。结果碰头以eclipse中之ABAP
Unit Runner视图中显。

专注:至今为止,还不克于DDL源代码编辑器中直接运行单元测试。

运转CDS的单元测试

在ADT中档,打开包含有CDS单元测试的ABAP测试类。右键选择Run
As->ABAP Unit
Test,或者用ctrl+shift+f10组合键来运作单元测试。结果会于eclipse中之ABAP
Unit Runner视图中显。

顾:至今为止,还不可知以DDL源代码编辑器中直接运行单元测试。

叫支持之测试场景

CDS Test Double framework支持啊加的CUT的以下DOC创建测试替身:

  • DDIC tables
  • DDIC views
  • CDS views
  • CDS views with Parameters
  • External Views
  • Table Functions
  • CDS special functions. CURRENCY_CONVERSION and UNIT_CONVERSION

乃可以打开/关闭给定CDS的DCL,更多密切节会在本文的后提供。

深受支持之测试场景

CDS Test Double framework支持为加的CUT的以下DOC创建测试替身:

  • DDIC tables
  • DDIC views
  • CDS views
  • CDS views with Parameters
  • External Views
  • Table Functions
  • CDS special functions. CURRENCY_CONVERSION and UNIT_CONVERSION

若得打开/关闭给定CDS的DCL,更多细心节会在本文的后提供。

凭借组件是Table Function

Tables Function的测试替身的控制方式和另外的CDS视图一样。

依傍组件是Table Function

Tables Function的测试替身的主宰方式及其他的CDS视图一样。

因组件是包含参数的CDS视图

CDS Test Double Framework提供了

cl_cds_test_data=>create( .. )->for_parameters( .. )

来呢含有参数的门类的测试替身插入数据。

METHOD eur_tax_rate_19_found.

"Step 1 : Insert testdata into the doubles
open_items = VALUE #( ( mandt = sy-mandt so_guid = '0F' tax_rate = '19.00' so_id = '1' ) ).
i_param_vals = VALUE #( ( parm_name = `pCuCo` parm_value = `EUR` ) ).

"CdsFrwk_demo_3 is a CDS view with parameters. Use framework method ->for_parameters( ) to insert test data
test_data = cl_cds_test_data=>create( i_data = open_items )->for_parameters( i_param_vals ).

DATA(open_items_double) = environment->get_double( 'CdsFrwk_demo_3' ).
open_items_double->insert( test_data ).

...
...
ENDMETHOD.

指组件是富含参数的CDS视图

CDS Test Double Framework提供了

cl_cds_test_data=>create( .. )->for_parameters( .. )

来也涵盖参数的色的测试替身插入数据。

METHOD eur_tax_rate_19_found.

"Step 1 : Insert testdata into the doubles
open_items = VALUE #( ( mandt = sy-mandt so_guid = '0F' tax_rate = '19.00' so_id = '1' ) ).
i_param_vals = VALUE #( ( parm_name = `pCuCo` parm_value = `EUR` ) ).

"CdsFrwk_demo_3 is a CDS view with parameters. Use framework method ->for_parameters( ) to insert test data
test_data = cl_cds_test_data=>create( i_data = open_items )->for_parameters( i_param_vals ).

DATA(open_items_double) = environment->get_double( 'CdsFrwk_demo_3' ).
open_items_double->insert( test_data ).

...
...
ENDMETHOD.

DCL对CUT的影响

若吧足以打开/关闭给定的CDS的DCL。但是,在时下,如果您的CDS
DDL在测试时遭遇DCL影响的话,我们建议在运转测试时老是关DCL。在未来,使用DCL时会发生很多摘可以玩,并且可使角色权限测试替身等。但是以当下底版中,你待注意在测试CDS
DDL时全关闭DCL(如果有些话)。在开辟DCL时来测试可能造成测试间断性失败,因为实在访问控制角色权限会于采取。因此,建议在你的生育测试着连续发出一个:

DISABLE_DCL=ABAP_TRUE in the cl_cds_test_environment=>create(…)

DCL对CUT的影响

而吧足以打开/关闭给定的CDS的DCL。但是,在现阶段,如果您的CDS
DDL在测试时备受DCL影响的话,我们建议以运作测试时总是关DCL。在未来,使用DCL时会见产生广大拣可以嬉戏,并且可以使角色权限测试替身等。但是当时之本被,你用专注在测试CDS
DDL时了关闭DCL(如果有话)。在开拓DCL时数测试可能致测试间断性失败,因为实际访问控制角色权限会为应用。因此,建议于您的生测试着老是有一个:

DISABLE_DCL=ABAP_TRUE in the cl_cds_test_environment=>create(…)

对特殊function的支持:CURRENCY_CONVERSION和UNIT_CONVERSION

CDS Test Double framework中可以吗零星个例外的CDS function提供支持:

"Step 1 : Create testdata using the special framework method create_currency_conv_data
test_data = cl_cds_test_data=>create_currency_conv_data( output = '399.21' )->for_parameters(
amount = '558.14'
source_currency = 'USD'
target_currency = 'EUR'
exchange_rate_date = '20150218'
).

"Step 2 : Get the double instance using the framework method get_double
DATA(curr_conv_data_double) = environment->get_double( cl_cds_test_environment=>currency_conversion ).

"Step 3 : Insert test_data into the double
curr_conv_data_double->insert( test_data ).

对特殊function的支持:CURRENCY_CONVERSION和UNIT_CONVERSION

CDS Test Double framework中好啊有限独特别的CDS function提供支撑:

"Step 1 : Create testdata using the special framework method create_currency_conv_data
test_data = cl_cds_test_data=>create_currency_conv_data( output = '399.21' )->for_parameters(
amount = '558.14'
source_currency = 'USD'
target_currency = 'EUR'
exchange_rate_date = '20150218'
).

"Step 2 : Get the double instance using the framework method get_double
DATA(curr_conv_data_double) = environment->get_double( cl_cds_test_environment=>currency_conversion ).

"Step 3 : Insert test_data into the double
curr_conv_data_double->insert( test_data ).

涵盖NULL值的测试

为当测试替身中插入null值,CDS Test Double Framework提供了措施:

cl_cds_test_data=>create( .. )->set_null_values( .. )

欠措施可以显式地设定null值。

partners = VALUE #( ( client = sy-mandt bp_id = '1' ) ).

"Step 1 : define the list of columns into which NULL is inserted
i_null_vals = VALUE #( ( `address_guid` ) ).

"Step 2 : Create testdata and set the NULL value object
test_data = cl_cds_test_data=>create( i_data = partners )->set_null_values( i_null_vals ).

"Step 3 : Get test Double instance
DATA(partners_double) = environment->get_double( i_name = 'SNWD_BPA' ).

"Step 4 : Insert test data into test double
partners_double->insert( test_data ).

含蓄NULL值的测试

以以测试替身中插null值,CDS Test Double Framework提供了点子:

cl_cds_test_data=>create( .. )->set_null_values( .. )

该法可显式地设定null值。

partners = VALUE #( ( client = sy-mandt bp_id = '1' ) ).

"Step 1 : define the list of columns into which NULL is inserted
i_null_vals = VALUE #( ( `address_guid` ) ).

"Step 2 : Create testdata and set the NULL value object
test_data = cl_cds_test_data=>create( i_data = partners )->set_null_values( i_null_vals ).

"Step 3 : Get test Double instance
DATA(partners_double) = environment->get_double( i_name = 'SNWD_BPA' ).

"Step 4 : Insert test data into test double
partners_double->insert( test_data ).

Demo examples

汝可以于这个包里找到多单元测试的例证:

SABP_UNIT_DOUBLE_CDS_DEMO

Demo examples

乃可在此包里找到多单元测试的例子:

SABP_UNIT_DOUBLE_CDS_DEMO

可用性

CDS Test Double Framework从NetWeaver AS ABAP 7.51
release千帆竞发可用。

可用性

CDS Test Double Framework从NetWeaver AS ABAP 7.51
release开始可用。

重多信息

报告bug的话,请为CSS组件BC-DWB-TOO-UT-CDS创建tickets。

小结:通过本文,你本足行使CDS Test Double
Framework高效地为你当CDS中贯彻之代码下推进来形容自动化的测试!

 

推而广之阅读:深切探討 Test Double、Dummy、Fake、Stub 、Mock 與
Spy

 

再也多信息

报告bug的话,请为CSS组件BC-DWB-TOO-UT-CDS创建tickets。

小结:通过本文,你本得利用CDS Test Double
Framework高效地为汝以CDS中实现之代码下推动来写自动化的测试!

 

扩大阅读:深切探討 Test Double、Dummy、Fake、Stub 、Mock 與
Spy

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图