是否有一种干净的方法来编写全局测试类{{1下的本地测试类CL_A
中的全局类LCL_B
的生产代码(特别是私有方法)的单元测试}}?到目前为止,我已经找到了一个技巧,这与干净的编码实践相去甚远。 TC_B
是TC_B
的朋友,CL_A
是LCL_B
的本地朋友。如果要测试类TC_B
的方法M_A
,则必须在全局测试类CL_A
中创建额外的包装器方法M_B
,该类调用TC_B
。请查看较低的伪代码示例,因为如果没有结构化示例,这可能会造成混淆。
感谢!
M_A
CLASS CL_A definition global friends TC_B.
private:
METHODS: M_A.
答案 0 :(得分:2)
Test publics, not internals,因为此处提供了详细的推理。
如果不可能(例如,由于您陷入了遗留代码),请建立一个与原始类成为朋友的全局测试类,并将私有方法公开为公共方法。
CLASS original_class DEFINITION.
PRIVATE SECTION.
METHODS some_private_method ...
ENDCLASS.
CLASS test_wrapper DEFINITION PUBLIC CREATE PUBLIC.
PUBLIC SECTION.
METHODS public_wrapper_for_private ...
ENDCLASS.
CLASS test_wrapper DEFINITION GLOBAL FRIENDS original_class.
CLASS test_wrapper IMPLEMENTATION.
METHOD public_wrapper_for_private.
result = some_private_method( ).
ENDMETHOD.
ENDCLASS.
然后您可以在任何测试test_wrapper
的地方创建本地单元测试类。
但是,该解决方案非常脆弱且不合格,在您有机会重构原始的类设计之前,它最多只是一种临时手段。