欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用SAP CRM Mock framework进行单元测试 CRMSAPSAP云平台SAP Cloud PlatformSAP成都研究院 

程序员文章站 2022-06-14 21:42:11
...

There is an interface IF_CRM_PRODUCT_PROXY in CRM which declares almost all function modules from function group COM_PRODUCT_API for product master access.

 

使用SAP CRM Mock framework进行单元测试
            
    
    
        CRMSAPSAP云平台SAP Cloud PlatformSAP成都研究院 

This interface is implemented by three classes below.

 

使用SAP CRM Mock framework进行单元测试
            
    
    
        CRMSAPSAP云平台SAP Cloud PlatformSAP成都研究院 

 

CL_CRM_PRODUCT_PROXY will delegate the call to MOCK_PROXY( for unit test ) or REAL_PROXY( for productive use ) according to different mode in which the code is running. As an application developer, we do not directly call CL_CRM_PRODUCT_PROXY in our application code, but use another wrapper class CL_CRM_PRODUCT_API instead. For example, I would like to get the product guid for product with id “I042416”, I use the following source code:

 

使用SAP CRM Mock framework进行单元测试
            
    
    
        CRMSAPSAP云平台SAP Cloud PlatformSAP成都研究院 

 

In productive use scenario, the callstack could be found below: our test report calls CL_CRM_PRODUCT_API, which calls CL_CRM_PRODUCT_PROXY, which then calls the productive implementation – CL_CRM_PRODUCT_REAL_PROXY. Inside the real proxy, function module COM_PRODUCT_GUID_GET is called.

 

使用SAP CRM Mock framework进行单元测试
            
    
    
        CRMSAPSAP云平台SAP Cloud PlatformSAP成都研究院 

 

How to use CRM mock framework to make fake product guid is returned

Suppose in my unit test code, I would like a fake guid “AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA” is returned by the same source code. 1. Just add the following source code to let CL_CRM_PRODUCT_PROXY know that currently the code is running under mock mode.

cl_factory_proxy=>set_source( iv_source = 'MOCK'
                              iv_xml_master_data_file = '\\TSHomeServer\TSHome$\i042416\Desktop\test.xml'
                              iv_read_from_mime = abap_false ).

This code would probably be inserted into the class_setup of your unit test code.

 

使用SAP CRM Mock framework进行单元测试
            
    
    
        CRMSAPSAP云平台SAP Cloud PlatformSAP成都研究院 

 

  1. paste the following source code into your test.xml:
<Mock XMLCompressVersion="2">
  <XMLRC_Object ObjectName="CL_CRM_PRODUCT_API" Component="COM_PRODUCT_GUID_GET" input="8B70F13430313231340300">
    <EV_PRODUCT_GUID>qqqqqqqqqqqqqqqqqqqqqg==</EV_PRODUCT_GUID></XMLRC_Object></Mock>

 

使用SAP CRM Mock framework进行单元测试
            
    
    
        CRMSAPSAP云平台SAP Cloud PlatformSAP成都研究院 

 

  1. Where does input 8B70F13430313231340300 in xml come from? Set a breakpoint on function module PROXY_CONVERT_TO_STRING,

 

使用SAP CRM Mock framework进行单元测试
            
    
    
        CRMSAPSAP云平台SAP Cloud PlatformSAP成都研究院 使用SAP CRM Mock framework进行单元测试
            
    
    
        CRMSAPSAP云平台SAP Cloud PlatformSAP成都研究院 

 

and you can know this value is calculated based on the zip operation of the concatenated value based on all input parameter values ( in my example, it is CDI042416 )

  1. Where does qqqqqqqqqqqqqqqqqqqqqg== for IV_PRODUCT_GUID in xml come from?

Execute function module SSFC_BASE64_ENCODE in test mode, paste the fake guid AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA and execute it, then you get base64 encoded value. Paste the value into xml file.

 

使用SAP CRM Mock framework进行单元测试
            
    
    
        CRMSAPSAP云平台SAP Cloud PlatformSAP成都研究院 

 

  1. Now execute the test report once again. From callstack you can see that the MOCK_PROXY is called, the faked guid is fetched from XML and returned:

 

使用SAP CRM Mock framework进行单元测试
            
    
    
        CRMSAPSAP云平台SAP Cloud PlatformSAP成都研究院 使用SAP CRM Mock framework进行单元测试
            
    
    
        CRMSAPSAP云平台SAP Cloud PlatformSAP成都研究院 

 

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

使用SAP CRM Mock framework进行单元测试
            
    
    
        CRMSAPSAP云平台SAP Cloud PlatformSAP成都研究院