07-17-2020 11:50 AM
Hello,
In our project, we use table function&AMDP to add sequence numbers for our CDS view.
@ClientHandling.type: #CLIENT_DEPENDENT
@ClientHandling.algorithm: #SESSION_VARIABLE
@VDM.viewType: #COMPOSITE
@VDM.private: true
@EndUserText.label: 'Add a Sequence Number for Each Group'
define table function P_AddSqncNumberTableFunction
with parameters
@Environment.systemField: #CLIENT
P_SAPClient : vdm_v_sap_client
returns
{
mandt : vdm_v_sap_client;
PaymentPlanUUID : abap.raw(16);
PaymentRunDate : dats;
PayingCompanyCode : abap.char(4);
NumberOfTrendPeriod : abap.dec(9);
TrendSequenceNumber : abap.int8;
}
implemented by method CL_FAP_PPS_ADD_SQNCNUMBER_AMDP=>ADD_SEQUENCSE_NUM_DATA;
CLASS cl_fap_pps_add_sqncnumber_amdp DEFINITION
PUBLIC
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb.
CLASS-METHODS:
ADD_SEQUENCSE_NUM_DATA FOR TABLE FUNCTION P_AddSqncNumberTableFunction.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS cl_fap_pps_add_sqncnumber_amdp IMPLEMENTATION.
METHOD ADD_SEQUENCSE_NUM_DATA
BY DATABASE FUNCTION
FOR HDB
LANGUAGE SQLSCRIPT
USING P_PaymentProposalSimlnAggrgn.
add_trendseqnum_results =
SELECT DISTINCT
:P_SAPClient as mandt,
PaymentPlanUUID as PaymentPlanUUID,
PaymentRunDate as PaymentRunDate,
PayingCompanyCode as PayingCompanyCode,
SumOfInvoices as NumberOfTrendPeriod,
ROW_NUMBER() OVER ( PARTITION BY PaymentPlanUUID,PayingCompanyCode ORDER BY PaymentRunDate ASC ) as TrendSequenceNumber
FROM P_PaymentProposalSimlnAggrgn
WHERE
mandt = :P_SAPClient;
RETURN
SELECT mandt,
PaymentPlanUUID,
PaymentRunDate,
PayingCompanyCode,
NumberOfTrendPeriod,
TrendSequenceNumber
FROM :add_trendseqnum_results
WHERE
mandt = :P_SAPClient;
ENDMETHOD.
ENDCLASS.
But When i try to write UT to cover these files, I didn't know how to do it?
CDS test double doesn't support table function.
I try to use Avalon like this: AMDP Test Framework AVALON.pptx
But I can't call the function in the AMDP like
CL_FAP_PPS_ADD_SQNCNUMBER_AMDP->ADD_SEQUENCSE_NUM_DATA
Because CL_FAP_PPS_ADD_SQNCNUMBER_AMDP is the implementation of a table function.
The method "ADD_SEQUENCSE_NUM_DATA" is defined as an implementation of a CDS table function and cannot be called directly from ABAP programs.
I also try to write test case like Notes on AVALON based testing
but it run into some error when i try to call function cl_avalon_cds_test_environment=>create
I also noticed Sandra Rossi's answer in How to test cds table function?
But it seems that this solution only covers the table function and needs to create an additional CDS view.
what should I do to write unit test for table function & AMDP?
Thank you in advance
Best Regards
Yao, Pengfei