点击此处---> 群内免费提供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();
现在的问题是,在编写上述代码的单元测试时,必须模仿以下内容:
-
outboundDeliveryService.beginChangeSet()
和outboundDeliveryService.execute(destination)
-
目的地
,它是HttpDestination的一个实例 -
changeSet.updateOutbDeliveryItem()
-
batchResponse.get()
这使单元测试非常复杂。 我们必须模拟一个真实的依赖项( outboundDeliveryService
)和该依赖项上执行的方法所返回的对象( changeSet
, batchResponse
)。 这似乎是对德米特尔法的经典违反,并且代码演示了深入合作者,这就是它变得越来越困难的原因 为此代码编写单元测试。
是否有更好的书写方式:
- 单元对此代码进行测试以防止所有此类复杂性?
- 如果没有,那么是否存在设计
OutboundDeliveryUpdater
的更好方法,以便解决该问题? 例如OutboundDeliveryUpdater
可以依赖于新类,例如SomeService
,它充当外观并隐藏了OutboundDeliveryV2ServiceBatchChangeSet
的复杂性。 但这又会将测试的复杂性从OutboundDeliveryUpdater
的单元测试转移到SomeService
的测试。
供参考:在这里回答了这个问题: https://stackoverflow.com/questions/59767026/how-to-unit-test-a-class-having-a-dependency-on-outbounddeliveryv2servicebatch
感谢您的回复。 我已经在堆栈溢出中发布了相同的问题。
一周热门 更多>