ABAP UT(单元测试)

2023-11-26 18:30
文章标签 单元测试 abap ut

本文主要是介绍ABAP UT(单元测试),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UT的重点是处理外部依赖(dependency),外部依赖主要是指当前需要测试的类里用到了其他类,Function Module或者是SQL;可能存在外部依赖的地方是类的属性,方法和方法参数。

处理外部依赖的做法之一是隔离(Isolation),让外部依赖返回我们需要的值从而达到测试的目的,常规做法是用接口(Interface)方法来封装外部依赖的逻辑,如果外部依赖本身是类,那也可以直接把这个类改写成接口。对于老的代码(Legacy Code),如果想做依赖隔离的话只能修改生产代码,所以新开发的代码应该尽量在有外部依赖地方使用接口来保证可测性,ABAP的代码检查(ATC)里有一项是类里所有的公有(Public)方法都需要写成接口方法,当然这只是建议,不是强制的。

UT用的接口可以是全局的,也可以局部的,局部的话是定义在类的Local部分。全局的好处是可以使用test double framework(动态创建实现类,并且可以指定方法返回值),局部的好处是不用定义全局对象,接口和测试的实现类(test double class)都在类的Local文件里定义和实现,测试类方法的返回值可以自己写逻辑指定。

定义好接口后,就是在测试环境里把接口的测试实例化对象“注入”到类里,常见做法是把测试用的接口都定义类的属性(需要是公有的或者有对应的外部调用方法),之后在测试环境中实例化(CONSTRUCTOR方法)测试类后进行“注入”,这样就实现了隔离(在生产环境下调用生产代码的逻辑,在测试环境里调用测试代码)。 Function Module除了可以使用接口封装外,也可以用Function Module的test double framework。

上面说的方法都是通过隔离外部依赖,自定义返回值来达到测试的目的,如果确定外部依赖的逻辑的话,也可以通过给“假数据”(mock data)的方法进行测试。比如如果知道外部依赖设计数据库交互,并且知道是哪些数据库表的话,可以用SQL test double(类cl_osql_test_environment)直接mock数据库表的数据,这样在测试环境中运行的话,会得到mock后的值,而不是实际数据库里的值。同样,如果确定外部依赖的类方法和Function Module的内部逻辑,也可以通过造“假数据”返回特定的值,但这种做法不是每个类方法和Function Module都能使用的,这时就要具体方法具体分析了。

总体来说隔离外部依赖更加常用,这种做法是不会执行外部依赖的代码的,所以可以保证可测性;而后面那种做法则会实际执行外部依赖代码,只不过我们了解其中的过程,通过造一些“假数据”来控制外部依赖返回的值,但不保证总是可行的。

总结一下:作为UT开发者,首先要关注外部依赖,然后进行相对应的处理;而作为生产代码开发者,如果为要保证代码的可测性,需要尽量把外部依赖封装成接口,不然后面想要补UT的话需要修改生产代码。

这篇关于ABAP UT(单元测试)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/426149

相关文章

springboot+maven搭建的项目,集成单元测试

springboot+maven搭建的项目,集成单元测试 1.在pom.xml文件中引入单元测试的依赖包 <!--单元测试依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></depen

PowerMock 单元测试总结与常见坑解决方案

PowerMock 单元测试总结与常见坑解决方案 官方文档: PowerMock GitHub PowerMock 在单元测试中能够帮助我们解决静态类、final 方法、私有方法等无法轻易 mock 的问题。下面是我在实际使用 PowerMock 时踩过的一些坑,并结合 PowerMock 的一些方法进行总结。 基本依赖和设置 在 Maven 中添加 PowerMock 依赖。在测试

JAVA—单元测试

单元测试:就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试     之前是使用main函数调用来进行检测,无法实现自动化测试 也会影响其他方法的测试 目录 1.junit框架概述 2.junit框架的常见注解 1.junit框架概述 package High_junit;//字符串工具类 用于测试public class String_ju

idea单元测试报错找不到主类

报错截图 主要是单测中没有配置类 在下面的command line 中选择jar manifest 因为条参数过长,这里设置只使用主类 详细解释见: https://www.jianshu.com/p/8322b3b17040

ABAP CURSOR游标的应用1

【应用场景】BW模块定时增量抽取SAP的销售案场收款单的业务主数据 【关键语法】 FUNCTION ZBWFM_ZTSD0011 .*"----------------------------------------------------------------------*"*"本地接口:*"  IMPORTING*"     VALUE(I_REQUNR) TYPE  SRSC

file | 某文件夹【解耦合】下的文件查找功能实现及功能单元测试

文件查找工具 概要思路OS模块 --- 学习版os.getcwd()os.path.dirname(os.getcwd())os.path.dirname() 和 os.path.basename() OS模块 — 实战版单元测试解耦合 概要 梳理业务主逻辑: 查看存放被采集JSON数据的文件夹内的文件列表【所有 包含文件夹下的文件夹下的文件】 这是本节内容聚焦的点和My

【JUnit单元测试框架】

单元测试的概念 单元测试,顾名思义,是针对软件中的最小可测试部分(通常是类或方法)进行的测试。它的目的是确保这些最小单元按照预期工作,从而帮助开发者快速定位和解决问题。单元测试通常遵循“隔离”原则,即测试一个功能单元时,应该尽量减少对其他部分的依赖,以便专注于当前单元的行为。 历史做法及其问题 将所有测试代码都放在main方法中,并通过main方法去调用其他方法进行测试。这种做法存在几个显著

visual studio2015单元测试

尝试引用了包含待测了待测程序的项目,但是不知道该如何调用待测代码,所以只能通过引用生成的库文件 进行单元测试的步骤: 一、创建控制台静态库项目,将要测试的代码编译为库文件 二、创建单元测试项目,引用创建的库文件,并在stdafx.h中包含之前库文件的头文件: 1)直接include头文件的绝对路径 2)将头文件复制到单元测试项目的根目录下,并直接在stdafx.h头文件中include头

软件测试常用工具总结(测试管理、单元测试、接口测试、自动化测试、性能测试、负载测试...)

前言 在软件测试的过程中,多多少少都是会接触到一些测试工具,作为辅助测试用的,以提高测试工作的效率,使用好了测试工具,能对测试起到一个很好的作用,同时,有些公司,也会要求掌握一些测试工具,或者,是在面试时,也会被问到测试工具的,比如,在面试时,最常见的问题便是,你在测试时,用的是什么测试工具?或者,要做性能测试时,要用什么测试工具进行测试会比较好?等等问题。 作为测试人员,了解下现在有哪些

ABAP Dialog Radio Button

额.妈了个巴子,整了一天,才发现,原来Dialog 的Radio Button 是要右键去设置组的 我就说为什么不行咧 误区:我以为是属性那里的组去设置的