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

香港服务器_阿里云怎么申请域名_限时特惠

小七 141 0

香港服务器_阿里云怎么申请域名_限时特惠

如果要测试的代码不适合自动测试,那么编写ABAP单元测试可能会有些麻烦。如果您必须处理从未接触过分离关注点概念的代码,那么所有关于模拟框架或测试驱动开发的喧嚣都一文不值。假设您有代码要维护,这取决于数据库内容或调用UI屏幕,而您的老板希望您增加部门的测试覆盖率—一个真实的场景?是的,至少在我的生活中。如果您不能重新设计和重写整个应用程序,那么作为一种解决方法,您可以使代码依赖于测试。这被认为是不好的风格,但它是有帮助的。

作为一个简单的例子,采取一种方法,从UI屏幕上获取数据,但应该通过模块测试进行测试。测试期间通常没有可用的UI。Setup和teardown方法也没有帮助,因为它们可能通过提供测试数据从数据库中选择数据。ABAP7.50之前的一个解决方案是自由风格的测试标志,购物返利平台,e、 g.如下:

CLASS cls DEFINITION.PUBLIC SECTION.METHODS get\u input RETURNING VALUE(input)TYPE string.PRIVATE SECTION.DATA test\u flag TYPE abap_bool.ENDCLASS类.

类cls实现。方法get\u input。如果test\u flag是INITIAL.cl\u demo\u input=>请求(更改字段=input).ELSE.input='xxx'。ENDIFENDMETHOD.ENDCLASS类.

作为被测类朋友的测试类的测试方法可以通过设置测试标志来影响测试方法。

测试风险等级无害持续时间短最终的类tst定义专用部分。测试输入的方法测试.ENDCLASS.

类tst实现。方法test\u input.DATA(oref)=NEW cls().oref->test\u flag=abap\u true.DATA(input)=oref->get\u input().cl\u abap\u unit\u assert=>assert\u equals(export='xxx'act=input)ENDMETHOD.ENDCLASS类.

风格不好,不受任何惯例约束。为了克服这个问题,ABAP7.50引入了测试接缝和测试注入的概念:

类cls定义。公共部分。方法获取输入返回值(input)类型string.ENDCLASS类.

类cls实现.方法get\u input.TEST-SEAM fake\u input.cl\u demo\u input=>请求(更改字段=input)).端部试缝ENDMETHOD.ENDCLASS类.

使用TEST-SEAM–END-TEST-SEAM,代码的一部分被定义为测试接缝,在测试期间可以被测试友好代码替换。不需要自定义属性,测试类不必再是要测试的类的朋友(只要只测试公共方法)。您不需要在生产代码中使用替代实现,因为它被转移到测试代码中,测试方法现在可能如下所示:

类tst定义用于测试风险级别无害持续时间短FINAL.PRIVATE部分.METHODS测试输入测试.ENDCLASS.

类tst实现.方法test\u input.test-INJECTION fake\u input.input='xxx'。结束test-INJECTION.DATA(input)=NEW cls()->get\u input().cl\u abap\u unit\u assert=>assert\u equals(export='xxx'act=input)ENDMETHOD.ENDCLASS类.

带TEST-INJECTION–END-TEST-INJECTIONM定义了一个测试注入,在测试执行期间替换同名的测试接缝。测试注入可以是空的,然后在测试期间简单地移除相应的测试接缝。测试注入可以在全局类和函数组的测试包含中定义。

有关更多信息、更多用例和更多示例,请参阅测试接缝。

很好!我想知道,在单元测试的执行过程中,你是否真的能访问到被测试源代码的上下文。

例如,语法检查和自动完成在测试注入中起作用吗?

语法检查,是(当然)

代码完成,到目前为止没有,大数据学什么,SE80和ADT都没有

嗨,霍斯特,

很好!在当地,我们对"模拟框架"争论了很多。我们尝试了本地适配器类/自定义Z*Mock/MockA/Test双框架。似乎没有什么东西是真正固定下来的,让人们同意这一点是一件非常痛苦的事情。

其中一个问题是,为了封装不可测试的代码,必须将大量的代码放在适当的位置。这既是一个时间问题(即到了必须被批准进行构建的时候),也是一个惯例问题(即不同的开发人员对如何创建可测试层有不同的想法)。

这可能有助于减少这个问题,并让人们越界。

只是为了考虑:我希望能够声明一个方法/函数的测试注入和单元测试执行可以动态地进行替换-而应用程序没有首先定义测试接缝。

这是可能的吗?我不确定这种动态方法是否会导致总体上更糟糕的代码,正如你在博客中提到的,分离关注点(数据/逻辑/用户界面)是我们应该追求的目标。但是我们似乎有很多不可测试的OO/非OO代码库。更进一步,拥有动态接缝可能会导致更多地采用单元测试,

我想知道,如果你没有显式地工具化应用程序,单元框架应该如何知道用什么代码替换什么代码。

你是在向隐式测试接缝点的方向思考,类似于臭名昭著的隐式增强点吗?或者您是否考虑过类似"在过程x中替换从n1到n2的行"(那么应用程序代码必须是稳定的)?或者我错过了什么明显的东西?

最佳

霍斯特

嗨霍斯特,

动态测试接缝只是一厢情愿的想法。