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.
This interface is implemented by three classes below.
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:
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.
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.
- 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>
- Where does input 8B70F13430313231340300 in xml come from? Set a breakpoint on function module PROXY_CONVERT_TO_STRING,
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 )
- 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.
- 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:
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关推荐
### 使用JUnit Framework进行单元测试编写的关键知识点 #### 单元测试的重要性及JUnit Framework的地位 - **单元测试**:是软件开发中的一个重要环节,它通过独立地测试程序中的最小可测试单元(如函数或方法),...
可以用来Mock JAVA代码中的静态方法
以下是对Mock在Python单元测试中使用的详细解释: 1. **什么是Mock?** Mock对象是替代真实对象的模拟版本,它可以在测试中代替真实的对象,返回预设的值或行为。在Python的`unittest.mock`库中,我们可以创建和...
总结来说,本文档提供的内容涵盖了单元测试的基本概念、Mock技术的运用、JUnit框架的详细讲解,以及Mockito、MockMVC和Mock.js等工具的使用。通过这些知识,开发者可以构建更健壮的测试体系,提升代码质量和软件工程...
在Spring中,Mock的使用可以模拟Web环境进行单元测试,不需要每一次都需要部署到容器里边。Mock会模拟Web环境,创建ApplicationContext和servletContext,加载配置文件,注册DAO和Manager类等。这样,在单元测试程序...
Java单元测试增强工具源码,换种思路写Mock,让单元测试更简单 构建项目 主项目使用JDK 1.6+和Maven 3+版本构建,其中demo子项目需要JDK 1.8+版本。 mvn clean install 本地生成文档 docsify serve docs ...
Java单元测试对于开发人员质量保证至关重要,尤其当面对一团乱码的遗留代码时,没有高覆盖率的单元测试做保障,没人敢轻易对代码进行重构。然而单元测试的编写也不是一件容易的事情,除非使用TDD方式,否则编写出...
在实践中,我们通常会遵循以下步骤来使用EasyMock进行单元测试: 1. 创建Mock对象:使用EasyMock.createMock()方法创建一个Mock对象。 2. 配置Mock对象:通过EasyMock.expect()设置Mock对象的方法调用期望,包括参数...
Junit作为Java领域最常用的单元测试框架,为开发者提供了简单易用的API来进行测试。本案例涵盖了Spring和Struts两大框架的单元测试,旨在帮助开发者掌握如何对这两个流行的Java Web框架进行有效的测试。 一、Junit...
模拟一切使用 mock 进行 python 单元测试的示例模拟 python 2.7: : (这里也有很多很好的例子) 从图书馆的主页: “mock 是一个用于在 Python 中进行测试的库。它允许您用模拟对象替换被测系统的某些部分,并对...
### Python单元测试和Mock使用总结 #### 一、单元测试的概念及重要性 **单元测试**,也称为**模块测试**,是指对程序中的最小可测试单元进行正确性验证的一种测试方法。这些单元通常指的是单独的功能块,如函数、...
在测试过程中,Mock 对象可以帮助开发者更好地测试单元测试、集成测试和系统测试。下面是 Mock 测试的详细介绍和 Fiddler AutoResponder 面板的使用方法。 什么是 Mock 测试? -------------------- Mock 测试是一...
在单元测试阶段,Mock Object技术扮演着重要角色。本文将深入探讨Mock Object的概念及其在Eclipse、JUnit、eclemma和EasyMock等工具中的应用。 Mock Object是一种在单元测试中模拟真实对象的行为和交互的技术,它...
深入学习Java单元测试(Junit+Mock+代码覆盖率) Java单元测试是软件测试的一种,旨在验证软件的正确性和可靠性。单元测试是编写测试代码,...Java单元测试需要使用Junit框架和Mock技术,并且需要注意代码覆盖率指标。
我们也学习了如何使用PHPUnit测试框架来编写单元测试。 知识点: 1. 使用Mock对象来修复测试代码 2. 使用PHPUnit测试框架来编写单元测试 3. 使用Symfony框架中的PostFactory类来创建Post对象 4. 使用断言来验证...
下面将详细介绍MockBean和SpyBean的使用方法及其在单元测试中的作用。 **MockBean** MockBean是Spring Boot提供的一个注解,用于在测试环境中注入模拟对象。在测试中,我们可能不希望真实的依赖项执行其实际行为,...