CDS测试框架介绍爱博体育app

动机

后天天津大学学家都通晓单元测试对我们代码的好处。并且大家都认可它是付出进程中必备的一有的。不过在把代码切换成数据库的格局下的时候,大家被无情地打回了软件测试的乌黑时期…大家后天面临着逻辑下推到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上下文中颇具固有的只读属性的依靠组件(比如数据库视图和数据库函数),这是1项专门的挑战。

本文中首要性的缩写:

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所创设的。

爱博体育app 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所创办的。

爱博体育app 2

测试什么?

单元测试应当注意于由三个给定视图完结的有价值的作用定义。不是全数的CDS视图都急需3个单元测试。在落到实处单元测试之前,提议辨别出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

 

相关文章