`
JerryWang_SAP
  • 浏览: 1025909 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

使用SAP CRM mock框架进行单元测试的设计

阅读更多

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.

 

 

  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>

 

 

  1. 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 )

  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.

 

 

  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:

 

 

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

0
0
分享到:
评论

相关推荐

    junit单元测试及Mock应用,超详细的PPT实战应用

    总结来说,本文档提供的内容涵盖了单元测试的基本概念、Mock技术的运用、JUnit框架的详细讲解,以及Mockito、MockMVC和Mock.js等工具的使用。通过这些知识,开发者可以构建更健壮的测试体系,提升代码质量和软件工程...

    JMOCKIT mock 静态方法 单元测试

    可以用来Mock JAVA代码中的静态方法

    用Java编写的最流行的单元测试mock框架.zip

    本文件“用Java编写的最流行的单元测试mock框架.zip”主要包含了关于Mockito的相关资料,帮助开发者更好地理解和使用这个强大的工具。 Mockito是一个开源的Java库,专门设计用于创建模拟对象,以隔离被测试代码并...

    lua单元测试框架测试用例实例

    Lua是一种轻量级的脚本语言,常用于游戏开发、...总的来说,使用Busted这样的单元测试框架对于Lua项目的开发和维护至关重要,它能有效提高代码质量和可靠性,减少调试时间,同时也为团队协作和代码审查提供了便利。

    有效使用Mock编写java单元测试

    然而单元测试的编写也不是一件容易的事情,除非使用TDD方式,否则编写出容易测试的代码不但对开发人员的设计编码要求很高,而且代码中的各种依赖也常常为单元测试带来无穷无尽的障碍。令人欣慰的是开源社区各种优秀...

    Mock在Python单元测试中的使用.pdf

    以下是对Mock在Python单元测试中使用的详细解释: 1. **什么是Mock?** Mock对象是替代真实对象的模拟版本,它可以在测试中代替真实的对象,返回预设的值或行为。在Python的`unittest.mock`库中,我们可以创建和...

    java单元测试 spring mock的使用

    在Spring中,Mock的使用可以模拟Web环境进行单元测试,不需要每一次都需要部署到容器里边。Mock会模拟Web环境,创建ApplicationContext和servletContext,加载配置文件,注册DAO和Manager类等。这样,在单元测试程序...

    单元测试框架深入与分享

    单元测试框架深入与分享 在软件开发中,单元测试是保证代码质量的重要步骤。单元测试框架是实现单元测试的基础设施,...使用适当的单元测试框架和Mock框架,可以提高代码的质量和可靠性,并减少软件测试的时间和成本。

    基于Java探针的Mock框架.zip

    在Java世界中,Mock框架则是单元测试的重要组成部分,它们帮助开发者模拟复杂的系统交互,以便在隔离环境中测试代码。"基于Java探针的Mock框架"可能是指一种结合了这两种技术的工具,它可能是为了提供更高级别的测试...

    Junit 单元测试完整案例

    本案例涵盖了Spring和Struts两大框架的单元测试,旨在帮助开发者掌握如何对这两个流行的Java Web框架进行有效的测试。 一、Junit基础 1. Junit简介:Junit是一款开源的、基于Java的测试框架,由Ernst Leifer和Kent...

    mock struts1 测试

    本文详细介绍了如何使用Mock技术来进行Struts1框架的单元测试。通过引入StrutsTest框架,并结合具体的示例代码,展示了如何在不启动Web容器的情况下模拟HTTP请求响应过程,从而更高效地完成单元测试工作。这对于提高...

    C++ mock框架mockcpp

    在单元测试中,mock对象是代替真实对象使用的,它能模拟真实对象的行为,以便测试代码能够独立于其他系统组件进行执行。Mockcpp提供了一种机制,允许开发者创建这些模拟对象,设置它们的期望行为,并验证这些行为...

    Spring整合Junit框架进行单元测试Demo

    当我们需要对Spring框架中的组件进行单元测试时,通常会将JUnit与Spring进行整合。本篇文章将详细介绍如何在Spring环境中利用JUnit进行单元测试,以及在这个过程中可能遇到的关键知识点。 首先,我们需要了解Spring...

    Java单元测试增强工具源码,换种思路写Mock,让单元测试更简单

    Java单元测试增强工具源码,换种思路写Mock,让单元测试更简单 构建项目 主项目使用JDK 1.6+和Maven 3+版本构建,其中demo子项目需要JDK 1.8+版本。 mvn clean install 本地生成文档 docsify serve docs ...

    TP框架单元测试

    在进行单元测试时,还可以考虑使用模拟(Mock)对象来隔离被测试的代码,避免外部依赖对测试的影响。ThinkPHP的单元测试支持使用`Mockery`库来创建和配置模拟对象。通过模拟对象,可以控制方法的返回值或行为,以...

    单元测试与 Mock 方法

    在实践中,我们通常会遵循以下步骤来使用EasyMock进行单元测试: 1. 创建Mock对象:使用EasyMock.createMock()方法创建一个Mock对象。 2. 配置Mock对象:通过EasyMock.expect()设置Mock对象的方法调用期望,包括参数...

    对Jfinal框架的Controller进行单元测试

    [JavaWeb]_[初级]_[对Jfinal框架的Controller进行单元测试] 博客文章https://infoworld.blog.csdn.net/article/details/124176492对应的项目, 使用maven管理项目,导入pom.xml.

    转:google mock C++单元测试框架-奋飞的菜鸟-ChinaUnix博客1

    Google Mock 是一个强大的 C++ 单元测试框架,它允许开发者创建模拟对象(Mock Objects)以测试复杂的系统中各个组件的交互。Mock 对象能够模拟真实对象的行为,并且可以预设它们在特定调用下的响应,这对于隔离测试...

Global site tag (gtag.js) - Google Analytics