如何在单元测试中模拟权限检查?

2020-08-25 18:37发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)如我最近的博客文章,我第一次涉足...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我最近的博客文章,我第一次涉足ABAP单元测试,这要归功于 Jacques Nomssi Nzali Mike Pokraka 和其他几个 其他人,我已经学到了很多东西,并且一切都很好。

我现在确实有一个未解决的问题,而不是将其隐藏在我的博客文章的评论中,我决定为其启动一个新的问答线程。 目前,我使用Z表来查看是否允许特定用户执行某些操作,并且此操作应按预期进行,并且我还通过模拟表访问获得了合适的测试用例。 因为我仍处于沙盒系统的原型模式下,所以这是实现它的最简单方法,并且比我要替换的代码中的硬编码检查要好。

在将代码移至实际开发系统时,我想将此逻辑切换为适当的授权对象,并检查是否允许用户执行操作。 因此,我的问题是:然后如何在单元测试期间"模拟"权限检查?

我已经在寻找答案,但是即使在此过程中我发现了其他有趣的文章(即 ABAP单位最佳做法 with-abap-unit-tests/" target =" _ blank">使用ABAP单元测试),没有一个包含我特定问题的答案。 那么,有没有一种可以在NW 7.50系统中工作并且不太需要实施呢? 例如,我可以想象按照另一种接口定义(一种用于auth而不是表选择)进行操作,但是不确定这是否是最佳选择。

非常感谢和欢呼

Baerbel

7条回答
hengyuye
2020-08-25 19:08

更新:

感谢 Sandra Rossi Mike Pokraka 弗雷德里克·吉罗德(Frederic Girod)我继续并为该类实现了附加的类和接口 auth检查,但是按照我已经必须要做的 表选择可测试的(仅来自本地测试类的代码段):

 [...]
 CLASS ltd_auth测试定义。
   "本地测试类以模拟权限检查例程
   公共部分。
   接口:zif_check_wb_action_auth。
   数据:
   zbc_ddic_check带默认密钥的zbc_ddic_check类型标准表。
 ENDCLASS。

 CLASS ltd_auth实施。
   方法zif_check_wb_action_auth〜user_has_ddic_auth。
   "对于模拟身份验证检查,我们在ZBC_DDIC_CHECK_ENTRY的内部表示中使用特殊条目
   "这模拟了一个用户,该用户的身份验证检查失败,但无论如何仍可以通过Z表中的条目进行DDIC更改
   "(但很可能是暂时的)。
   数据:lv_char40类型char40。

   清除r_result。
   lv_char40 = i_uname。

   读取表zbc_ddic_check和键check_title ='DDIC-USER-NO-AUTH'
   Checked_entity = lv_char40
   check_active = abap_true
   INTO DATA(zbc_ddic_check_entry)。

   IF zbc_ddic_check_entry-check_active EQ abap_true。
   r_result = abap_true。
   其他。
   r_result = abap_false。
   万一。
   终结法。
 ENDCLASS。
 [...]

 类别ltc_action定义,用于测试持续时间短的风险等级危害。
   "本地测试类来测试检查逻辑
   专用部分。
   数据:
   将TYPE REF剪切为zcl_check_wb_action,
   dao TYPE REF TO ltd_青岛
   身份验证类型引用为ltd_auth。  " <-添加
 [...]
 ENDCLASS。

 类别ltc_action IMPLEMENTATION。
   方法设置。
   dao = NEW#()。
   验证=新#()。  " <-添加
   cut = NEW#()。
   cut-> _ dao = dao。  "注入表选择
   cut-> _ auth = auth。"注入auth-check" <---已添加
 [...]
   "使用示例数据填充ZBC_DDIC_CHECK的模拟内部表,以测试身份验证检查

   auth-> zbc_ddic_check = VALUE#((check_title ='DDIC-USER-NO-AUTH'
   check_entity ='DDICNOAUTH'check_active = abap_true)
   )。

测试方法本身保持不变。 我确实有一些错误 同时添加身份验证检查逻辑并定期重新运行测试。 最初,我错过了必须(后见之明!)定义和 在测试类中实现auth-check接口,从而导致 运行测试时的技术问题。 弄清楚之后, 我确实没有通过其中一项测试的实际失败,直到我意识到自己 还必须为Z表的内部模型提供测试数据 验证检查逻辑(auth-> zbc_ddic_check)。

感谢您的帮助!

一周热门 更多>