点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
你好社区,
当从本地模拟实现过渡到Test Double Framework时,我在使用它对接口上带有 Exporting Parameter 的方法进行双重处理时遇到了一个问题。 当测试方法从"新"双重实例中导入值时,该实例在生成双重类时首次调用该实例中的方法时,将引发CX_ATD_EXCEPTION。
我什至发现了
此博客文章介绍了该框架,但是用于导出参数的示例未将其值导入测试方法中。 将代码复制到系统并接收它们会触发相同的框架异常。
奇怪的是,当两次调用该方法时,但仅在第二次调用中接收到它的值时,它才能按预期工作。
下面是此行为的示例代码。 一个简单的全局界面:
界面zif_test_df public。 方法is_account_open 导入i_number类型i 导出值(e_is_open)键入abap_bool。 终端接口。
单元测试代码:
报告zp_test_df。 ltc_test类定义风险等级无害持续时间,测试短。 私人部分。 方法设置。 方法fail_when_importing_firstcall进行测试。 方法passs_when_importng_secndcall进行测试。 数据m_mock类型引用到zif_test_df。 数据m_result类型为abap_bool。 结束类。 ltc_test类的实现。 方法设置。 m_mock?= cl_abap_testdouble => create('ZIF_TEST_DF')。 cl_abap_testdouble => configure_call(m_mock)-> set_parameter(name ='E_IS_OPEN'value = abap_true)。 方法。 方法fail_when_importing_firstcall。 "使用'[ABAP Testdouble Framework]导入配置调用中不允许的参数来提高CX_ATD_EXCEPTION。使用SET_PARAMETER' m_mock-> is_account_open( 导出i_number = 123 导入e_is_open = m_result )。 方法。 方法passs_when_importng_secndcall。 "首先调用,它会正确初始化double实例。 m_mock-> is_account_open( 导出i_number = 123 *导入ev_is_open = m_result )。 "第二次调用有效,并且m_result从double FW接收值。 m_mock-> is_account_open( 导出i_number = 123 导入e_is_open = m_result )。 方法。 结束类。
单元测试结果:
(18.8 kB)
实际上,在您的问题中,您给出了答案:"奇怪的是,当两次调用该方法时,它可以按预期工作。"
是的,该方法总是被"两次调用"。
"配置调用"之后的第一个调用是输入参数值的注册(即使不需要特定值,例如,一个没有输入参数的方法,或其所有参数都将被忽略 )。
(在被测代码中)下一次调用将返回配置的值。
给人一种错误的感觉,即该模拟方法将被调用两次,因为您的代码在"测试测试"中非常特殊。
在正常用法中,您可以通过定义模拟值(返回,导出,引发异常,引发事件)来配置调用,然后设置对配置调用有效的输入参数的值,然后测试您的 被测代码,通过将测试双精度作为参数传递,这将调用您的测试双精度的某些方法。
您的代码应如下所示:
是的,我在这种情况下使用FAIL。
对我来说似乎无法配置导出参数。
如果您从386行跳转到 392它"有效"。
一周热门 更多>