在ABAP单元测试中模拟sy-uname

Erc*_*rch 4 sap abap unit-testing mocking

我正在尝试用ABAP编写我的第一个单元测试。

我的测试方法(通过system variable sy-uname)获取登录用户的团队成员。

因为我希望测试能够为所有人运行,所以我不能只让方法运行并声明我自己的团队成员之一。

我要模拟sy-uname,所以测试不依赖于执行它的人。

这可能吗?如果是,您如何模拟系统参数?

San*_*ssi 5

我一半同意由豪杰给出的答案:一个人应该使用测试接缝(因为ABAP 7.50存在)一个这么简单的情况下(更换sy-uname),你应该只因为他提出的使用提供程序类。

测试接缝被视为对生产代码的污染,因为它会降低代码的可读性(生产代码与测试代码的混合)。

注意:测试接缝的ABAP文档(上面的链接)至少提供了以下可能的用法:

  • 授权检查(AUTHORITY-CHECK)
  • ABAP SQL语句(SELECT,MODIFY等)-由于ABAP SQL可以用ABAP 7.52类模拟,因此它成为一个不好的例子CL_OSQL_TEST_ENVIRONMENT

按照经验法则,完全不应使用测试接缝,也不应将其视为最后的解决方案。

但是如果没有别的选择,例如将测试添加到“旧版”代码(陈旧的代码,通常不使用面向对象的设计模式编写,则认为无法通过ABAP单元进行测试),那么您最终可能没有选择其他选择。

正如Horst Keller(全球最好的ABAP专家之一,负责SAP的ABAP文档)所说:

“如果您不能重新设计和重写整个应用程序,则可以采用一种变通方法,使代码测试依赖。这被认为是不好的样式,但它会有所帮助。”

由于问题仅是问题,sy-uname而不是整个程序,因此重构的工作量sy-uname要少得多,因此没有理由不使用类。