在nigeljamesjelena和Michelle的博客文章"ABAP–特殊雪花"下的讨论中,他们要求我提供一篇关于ABAP单元测试的真实示例的博客文章。正如你可能知道的,你不能(不应该)拒绝来自Jelena Perfiljeva和Michelle Crapo的愿望,所以我们来:
背景:公共服务/公共事业任务:编写一个网关服务来获取不同网络提供商的电表读数价格(直接通过网络ID或客户地址)(我在这里只展示数据检索类的一部分,而不是整个GW服务)
在我的例子中,我使用的是一种简单的单元测试类型,"构造函数注入",这就是为什么我们需要三个类:
数据检索类,它也包含测试类用于数据库选择和外部依赖(如函数模块调用)的数据库类数据模拟类/test double
在您的数据检索类中,您可以像平常一样开始编码,例如
在"get\u priceid"方法中,您可以正常放置select语句。在我们的例子中,我们在database类中调用一个方法:
每个数据库访问、函数模块或外部方法调用都是这样封装的。
database类中的方法是这样的(如您所见,您首先要创建一个接口,物联网公司排名,我们将在稍后的测试双类中使用它):
如果您在数据检索类的构造函数中实例化数据库类,那么您的代码应该已经可以工作了。
因为在我们的单元测试中,我们只想测试我们的代码,而不想测试选择或函数模块等外部依赖项,我们可以在所谓的"双重测试"类中模拟论文:在testdouble中,云的服务器,大数据网站,我们实现了与在数据库类中使用的相同的接口。因此我们必须实现相同的方法,但是使用模拟数据:
返回数据检索类。现在我们有两个可选的类可以返回数据,企业正版软件,一个直接来自数据库/功能模块,另一个带有模拟数据。我们想用哪一个?我们怎么做?这里我们可以使用所谓的"构造函数注入",在这里我们可以切换类。在常规过程中(例如由网关服务调用),我们只需实例化数据库类。如果我们被单元测试调用,我们使用test double类的实例,我们将在test类的setup方法中实例化该实例(见下文)。
数据检索类的构造函数如下:
在test类的setup方法中,我们实例化test double类并将该实例传递给数据检索类的构造函数:
现在我们可以在我们的测试类中创建我们的测试方法,发发淘客助手,例如
@Jelena和Michelle:我希望这对如何在现实世界中使用单元测试有一点帮助。
附言:下面是我的"幸福岛"的一个例子: