如何对依赖于OutboundDeliveryV2ServiceBatch的类进行单元测试?

2020-08-24 23:01发布

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

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


我正在尝试为自定义类编写单元测试,我们称它为 OutboundDeliveryUpdater ,它依赖于 com.sap.cloud.sdk.s4hana.datamodel.odata.namespaces .outbounddeliveryv2.batch.OutboundDeliveryV2ServiceBatch (这是一个类字段)。 要求是在S4系统上更新多个外向交货项目。 OutboundDeliveryUpdater 中执行更新的方法如下所示(为简洁起见,省略了异常处理):

  OutboundDeliveryV2ServiceBatchChangeSet changeSet = outboundDeliveryService.beginChangeSet();

 itemsForUpdation.forEach(changeSet :: updateOutbDeliveryItem);

 changeSet.endChangeSet();

 BatchResponse batchResponse = outboundDeliveryService.execute(destination);

 boolean isUpdateSuccessful batchResponse.get(0).isSuccess();
  

现在的问题是,在编写上述代码的单元测试时,必须模仿以下内容:

  1. outboundDeliveryService.beginChangeSet() outboundDeliveryService.execute(destination)
  2. 目的地,它是HttpDestination的一个实例
  3. changeSet.updateOutbDeliveryItem()
  4. batchResponse.get()

这使单元测试非常复杂。 我们必须模拟一个真实的依赖项( outboundDeliveryService )和该依赖项上执行的方法所返回的对象( changeSet batchResponse )。 这似乎是对德米特尔法的经典违反,并且代码演示了深入合作者,这就是它变得越来越困难的原因 为此代码编写单元测试。

是否有更好的书写方式:

  1. 单元对此代码进行测试以防止所有此类复杂性?
  2. 如果没有,那么是否存在设计 OutboundDeliveryUpdater 的更好方法,以便解决该问题? 例如 OutboundDeliveryUpdater 可以依赖于新类,例如 SomeService ,它充当外观并隐藏了 OutboundDeliveryV2ServiceBatchChangeSet 的复杂性。 但这又会将测试的复杂性从 OutboundDeliveryUpdater 的单元测试转移到 SomeService 的测试。

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

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


我正在尝试为自定义类编写单元测试,我们称它为 OutboundDeliveryUpdater ,它依赖于 com.sap.cloud.sdk.s4hana.datamodel.odata.namespaces .outbounddeliveryv2.batch.OutboundDeliveryV2ServiceBatch (这是一个类字段)。 要求是在S4系统上更新多个外向交货项目。 OutboundDeliveryUpdater 中执行更新的方法如下所示(为简洁起见,省略了异常处理):

  OutboundDeliveryV2ServiceBatchChangeSet changeSet = outboundDeliveryService.beginChangeSet();

 itemsForUpdation.forEach(changeSet :: updateOutbDeliveryItem);

 changeSet.endChangeSet();

 BatchResponse batchResponse = outboundDeliveryService.execute(destination);

 boolean isUpdateSuccessful batchResponse.get(0).isSuccess();
  

现在的问题是,在编写上述代码的单元测试时,必须模仿以下内容:

  1. outboundDeliveryService.beginChangeSet() outboundDeliveryService.execute(destination)
  2. 目的地,它是HttpDestination的一个实例
  3. changeSet.updateOutbDeliveryItem()
  4. batchResponse.get()

这使单元测试非常复杂。 我们必须模拟一个真实的依赖项( outboundDeliveryService )和该依赖项上执行的方法所返回的对象( changeSet batchResponse )。 这似乎是对德米特尔法的经典违反,并且代码演示了深入合作者,这就是它变得越来越困难的原因 为此代码编写单元测试。

是否有更好的书写方式:

  1. 单元对此代码进行测试以防止所有此类复杂性?
  2. 如果没有,那么是否存在设计 OutboundDeliveryUpdater 的更好方法,以便解决该问题? 例如 OutboundDeliveryUpdater 可以依赖于新类,例如 SomeService ,它充当外观并隐藏了 OutboundDeliveryV2ServiceBatchChangeSet 的复杂性。 但这又会将测试的复杂性从 OutboundDeliveryUpdater 的单元测试转移到 SomeService 的测试。
付费偷看设置
发送
2条回答
悠然的二货
1楼-- · 2020-08-24 23:17
me_for_i
2楼-- · 2020-08-24 23:20

感谢您的回复。 我已经在堆栈溢出中发布了相同的问题。

一周热门 更多>