云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

阿里云_阿里云海外服务器_超低折扣

小七 141 0

在这个博客系列中,我将分享我对ABAP单元测试和TDD方法的理解和知识。由于这本身是一个庞大的主题,我将首先从单元测试基础开始,然后深入研究测试框架。稍后我将写TDD,它的必要性,并说明如何实际实现它。博客系列的结构是这样的,它从零开始,然后深入到概念中。

这里是这个博客系列中其他博客的链接:

在这篇博客文章中,我将介绍单元测试的基本原理和单元测试的基本概念。我还将给出ABAP中一个非常简单的单元测试示例,包括正面和负面场景。这个博客是特别为那些想系统地开始ABAP单元测试的初学者准备的。

首先简单介绍一下,让我先回答单元测试的5个WH问题。

表1:单元测试的5个WH分析

在进入单元测试的概念之前,我们需要有一个清楚的概念"单元"在术语"单元测试"中是指

单元基本上是代码中最小的部分,可以在逻辑上隔离并在这种隔离中测试。

在ABAP中,单元可以是方法、功能模块、子程序等。

每个单元通过其内部写的逻辑来完成其预期任务。这将根据给定的条件产生某些效果。这些影响大致可以是以下两种情况之一:

表2:单元测试结果中要验证的内容

CUT–测试中的代码/测试中的类

顾名思义,这是要测试的实际生产代码。在面向对象程序设计中,这个CUT通常是class.

LTC–Local Test class

我们应该定义并实现一个单元测试类来实现我们的CUT。这个测试类是CUT的本地类,称为本地测试类(LTC)。在定义中使用"for testing"关键字,将该类标记为测试非常重要,以便在运行时将其作为测试类执行。

UTM–单元测试方法

这些是LTC的方法。它们可以是公共的,也可以是私人的。在定义中使用"for testing"关键字将这些方法标记为测试非常重要,以便在运行时将它们作为测试方法执行。

如5 WH分析中所述,我们测试生产代码的行为。

很明显,任何给定的单元都会根据场景表现出多种行为。每个这样的场景都是一个"测试用例"。这些被分为正测试用例和负测试用例。

单元测试方法将调用相应的单元。作为一个良好的实践,建议为一个单元的一个场景编写一个单元测试方法。

图1:LTC与CUT的交互

第一原则

第一是快速、独立、可重复、自我验证的缩写,及时。

单元测试应遵循以下第一原则:

表3:单元测试第一原则

文档-取决于组件

剪切可能会与各种工件(单元中未定义)交互,如DB表、DDIC视图、CD视图、文件系统、Web服务、触发器输出、,大数据的现状,调用其他单元等。这些是切割成功执行所依赖的组件。这些被称为文档。

然而,根据第一原则,单元测试应该是独立的和快速的。

而且,如果LTC在执行时访问文档,也有一些困难,这些细节将在下一篇博客中讨论。

我们更喜欢用测试双倍模拟所有这些依赖关系。这些DOC的mock/double将在单元测试运行时替换实际的DOC。当文档是数据库对象或CDS视图时,osqltestdouble框架可以在测试环境中很好地处理这个问题。为了在这个博客里保持简单,我没有在这里提到细节。我将在下一篇博客中对此进行更深入的探讨。

Assertion

根据其含义,"Assertion"一词的意思是"您坚信是正确的陈述"。

在5wh分析中,我们验证单元测试结果是否符合预期。

在ABAP中,我们使用cl\u ABAP\u unit\u assert类的静态方法。我们将实际值和期望值作为参数传递给这些方法。因此,云服务器多少钱一年,我们对行为(单元测试的结果)进行断言,并将其作为参数传递。

测试夹具

测试夹具是为要测试的实体提供测试环境的东西,以便每次在实体上运行测试时都能一致地执行。测试夹具应用于软件、电子、制造等多个领域

测试夹具方法在单元测试模块的结构中起着至关重要的作用

在单元测试中,我们必须建立测试环境和测试框架。在ABAP中,我们使用setup()和class\u setup()方法。

在测试结束时,我们销毁(拆掉)这个设置。这是使用teardown()和class_teardown()方法完成的。

测试夹具在ABAP LTC的私有部分中定义和实现。让我们看一下每个夹具方法的简短描述:

表4:ABAP单元测试的测试夹具

4阶段测试方法

考虑一个您正在进行在线测试的真实场景,你的分数将在考试结束后立即显示:

单元测试是按照4个阶段的方法进行的-设置、练习、断言、拆卸:

设置:设置测试夹具

设置()class_setup()

练习:与CUT交互

断言:做必要的事情来验证是否获得了预期的结果

拆卸:拆卸测试夹具

拆卸()class\u teardown()

我现在给大家展示一个非常简单的例子,让大家对上述理论有一个更清晰的理解。

在这里,我创建了一个类ZCL\u DEMO\u UNIT\u TEST SESSION,大数据是干什么的,其中一个方法是get\u YRS\u of \u SRVC。

图2:被测类示例

这个方法接受员工的雇佣日期并提供服务年限。它有一个导入参数和两个导出参数。方法签名和实现如下图所示。

图3:生产方法定义

现在让我们找出这个方法的正面和负面场景(测试用例)。