我正在尝试用ABAP编写我的第一个单元测试。
我的测试方法(通过system variable sy-uname
)获取登录用户的团队成员。
因为我希望测试能够为所有人运行,所以我不能只让方法运行并声明我自己的团队成员之一。
我要模拟sy-uname
,所以测试不依赖于执行它的人。
这可能吗?如果是,您如何模拟系统参数?
我一半同意由豪杰给出的答案:一个人应该不使用测试接缝(因为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
要少得多,因此没有理由不使用类。