尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

109、ABAP单元测试初探

109、ABAP单元测试初探 109、ABAP单元测试初探上周五晚上,生产系统一个报表突然跑出重复数据,我远程连上去看,发现是某个内部类的方法在特定输入下返回了不该返回的值。当时我第一反应是打开这个类,往下翻,找到那个方法,盯着屏幕看了五分钟,愣是没看出问题。后来手动在SE38里拼了一段测试代码,造了几条数据,调了好几次,才发现是MOVE-CORRESPONDING把某个不该覆盖的字段给覆盖了。那一瞬间我就想,要是这个类当初写了单元测试,这种低级错误根本不会流到生产。其实ABAP里的单元测试不是什么新东西,SE24创建类的时候就能勾选“Test Class”,ABAP Development Tools里也可以直接建测试类。但很多从ECC时代过来的老伙计,习惯写完代码直接激活、直接跑事务码,根本不知道还有个ABAP Unit这回事。我今天想聊的,就是怎么用最土的方式把单元测试跑起来,让代码在进传输请求之前,先过一遍自己的“体检”。先别急着写测试类,你得先搞清楚一件事:ABAP单元测试不是给整个程序做集成测试,它只针对一个类或一个方法,验证“给定这个输入,输出是否符合预期”。所以你要测的东西,必须是能被实例化、能被调用、能被检查的。如果你写的一个功能全在FORM里,还依赖一堆屏幕字段和全局变量,那没法测。这也是为什么很多老代码没法做单元测试的原因——不是ABAP不行,是代码结构不行。想测试,就得先把逻辑拆到类里,把外部依赖掐断。举个例子,我之前写过一个处理物料主数据的增强,其中有段逻辑是根据物料类型和行业领域决定是否允许维护某些字段。原来这逻辑写在CMOD里,测试的时候得跑到MM02里拼命按回车。后来我把它挪到一个单独的类ZCL_MATERIAL_RULE里,方法叫CHECK_FI
返回列表