我正在编写一个编排(restful web)服务,它将代理对多个依赖服务的调用,并将结果打包成一个综合结果对象。
部分原因是将各种服务的输入和输出映射到其他服务的输入。
例如,OrchestrationService
接受输入。它调用DepServiceA
来检索结果。然后它获取DepServiceA
的输出,将其与OrchestrationService
的输入组合以产生DepServiceB
的输入。 DepServiceB
会返回一个结果,然后将结果与DepServiceA
的结果和OrchestrationService
的输入相结合,以创建DepServiceC
和DepServiceD
的输入。所有这些映射都是通过一个有凝聚力的映射器类 - Mapper
完成的。
现在为了擦。 OrchestrationService
中有两个相似但不同的端点,它们接收两个相似但不同的输入,并调用两个相似但不同的DepServiceB
调用。 工作流程的其余部分是相同的。唯一的区别是DepServiceB
的输入。
因此,我将Mapper
的公共部分抽象为MapperBase
,一个抽象类,以及两个子类Mapper1
和Mapper2
。
基本理念是这个。
public abstract class MapperBase {
protected ServiceCInput MapToServiceCInput(ServiceBOutput output, [some other fields passed in from subclass state]){
//map to Service C Input
}
protected ServiceDInput MapToServiceDInput(ServiceBOutput output, [some other fields passed in from subclass state]){
//map to Service D Input
}
public abstract ServiceCInput MapToServiceCInput(ServiceBOutput output);
public abstract ServiceDInput MapToServiceDInput(ServiceBOutput output);
}
public class Mapper1 : MapperBase {
public ServiceCInput MapToServiceCInput(ServiceBOutput output){
return MapToServiceCInput(output, [state based params]);
}
public ServiceDInput MapToServiceDInput(ServiceBOutput output){
return MapToServiceDInput(output, [state based params]);
}
public ServiceBInput1 MapToServiceBInput(ServiceAOutput serviceAOutput){
//map to Service B Input 1
}
}
public class Mapper2 : MapperBase {
public ServiceCInput MapToServiceCInput(ServiceBOutput output){
return MapToServiceCInput(output, [state based params]);
}
public ServiceDInput MapToServiceDInput(ServiceBOutput output){
return MapToServiceDInput(output, [state based params]);
}
public ServiceBInput2 MapToServiceBInput(ServiceAOutput serviceAOutput){
//map to Service B Input 2
}
}
现在,这些映射器在实际端点中使用,没问题。
但是,因为我是一名优秀的开发人员,所以我想确保这些地图制作者符合我的规范,并进行单元测试以涵盖这一点。
Mapper1
没有问题。单元测试编译并运行。
Mapper2
有一组类似的单元测试。但是,Mapper2
的集合会生成以下编译错误:
'MapToServiceBInput' is not supported by the language
。
单元测试项目中只发生 ,而Mapper2
只发生 。我所说的方法并不重要。它总是生成此错误(使用该方法当前具有的任何名称)。两个类中没有其他方法存在问题。就是这个。
我尝试过以下方法:
我总是得到此编译器错误,但仅适用于Mapper2
且仅适用于单元测试项目。
我不知所措。