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的原创文章,请关注公众号"汪子熙":
相关推荐
总结来说,本文档提供的内容涵盖了单元测试的基本概念、Mock技术的运用、JUnit框架的详细讲解,以及Mockito、MockMVC和Mock.js等工具的使用。通过这些知识,开发者可以构建更健壮的测试体系,提升代码质量和软件工程...
可以用来Mock JAVA代码中的静态方法
本文件“用Java编写的最流行的单元测试mock框架.zip”主要包含了关于Mockito的相关资料,帮助开发者更好地理解和使用这个强大的工具。 Mockito是一个开源的Java库,专门设计用于创建模拟对象,以隔离被测试代码并...
Lua是一种轻量级的脚本语言,常用于游戏开发、...总的来说,使用Busted这样的单元测试框架对于Lua项目的开发和维护至关重要,它能有效提高代码质量和可靠性,减少调试时间,同时也为团队协作和代码审查提供了便利。
然而单元测试的编写也不是一件容易的事情,除非使用TDD方式,否则编写出容易测试的代码不但对开发人员的设计编码要求很高,而且代码中的各种依赖也常常为单元测试带来无穷无尽的障碍。令人欣慰的是开源社区各种优秀...
以下是对Mock在Python单元测试中使用的详细解释: 1. **什么是Mock?** Mock对象是替代真实对象的模拟版本,它可以在测试中代替真实的对象,返回预设的值或行为。在Python的`unittest.mock`库中,我们可以创建和...
在Spring中,Mock的使用可以模拟Web环境进行单元测试,不需要每一次都需要部署到容器里边。Mock会模拟Web环境,创建ApplicationContext和servletContext,加载配置文件,注册DAO和Manager类等。这样,在单元测试程序...
单元测试框架深入与分享 在软件开发中,单元测试是保证代码质量的重要步骤。单元测试框架是实现单元测试的基础设施,...使用适当的单元测试框架和Mock框架,可以提高代码的质量和可靠性,并减少软件测试的时间和成本。
在Java世界中,Mock框架则是单元测试的重要组成部分,它们帮助开发者模拟复杂的系统交互,以便在隔离环境中测试代码。"基于Java探针的Mock框架"可能是指一种结合了这两种技术的工具,它可能是为了提供更高级别的测试...
本案例涵盖了Spring和Struts两大框架的单元测试,旨在帮助开发者掌握如何对这两个流行的Java Web框架进行有效的测试。 一、Junit基础 1. Junit简介:Junit是一款开源的、基于Java的测试框架,由Ernst Leifer和Kent...
本文详细介绍了如何使用Mock技术来进行Struts1框架的单元测试。通过引入StrutsTest框架,并结合具体的示例代码,展示了如何在不启动Web容器的情况下模拟HTTP请求响应过程,从而更高效地完成单元测试工作。这对于提高...
在单元测试中,mock对象是代替真实对象使用的,它能模拟真实对象的行为,以便测试代码能够独立于其他系统组件进行执行。Mockcpp提供了一种机制,允许开发者创建这些模拟对象,设置它们的期望行为,并验证这些行为...
当我们需要对Spring框架中的组件进行单元测试时,通常会将JUnit与Spring进行整合。本篇文章将详细介绍如何在Spring环境中利用JUnit进行单元测试,以及在这个过程中可能遇到的关键知识点。 首先,我们需要了解Spring...
Java单元测试增强工具源码,换种思路写Mock,让单元测试更简单 构建项目 主项目使用JDK 1.6+和Maven 3+版本构建,其中demo子项目需要JDK 1.8+版本。 mvn clean install 本地生成文档 docsify serve docs ...
在进行单元测试时,还可以考虑使用模拟(Mock)对象来隔离被测试的代码,避免外部依赖对测试的影响。ThinkPHP的单元测试支持使用`Mockery`库来创建和配置模拟对象。通过模拟对象,可以控制方法的返回值或行为,以...
在实践中,我们通常会遵循以下步骤来使用EasyMock进行单元测试: 1. 创建Mock对象:使用EasyMock.createMock()方法创建一个Mock对象。 2. 配置Mock对象:通过EasyMock.expect()设置Mock对象的方法调用期望,包括参数...
[JavaWeb]_[初级]_[对Jfinal框架的Controller进行单元测试] 博客文章https://infoworld.blog.csdn.net/article/details/124176492对应的项目, 使用maven管理项目,导入pom.xml.
Google Mock 是一个强大的 C++ 单元测试框架,它允许开发者创建模拟对象(Mock Objects)以测试复杂的系统中各个组件的交互。Mock 对象能够模拟真实对象的行为,并且可以预设它们在特定调用下的响应,这对于隔离测试...