我有一个服务方法,可以从存储库中获取数据,并使用自动映射器将其映射到dto。
public CustResponse GetCustomer(string id)
{
var repo = _myRepo.GetData(id);
var response = AutoMapper.Mapper.Map<CustResponse>(repo.custObj)
.Map(repo.addrObj);
return response;
}
我创建了.map扩展方法,以便将类中的多个对象映射到单个dto。
public static TDestination Map<TSource, TDestination>(this TDestination destination, TSource source)
{
return Mapper.Map(source, destination);
}
自动映射器配置:
m.CreateMap<CUSTOBJ,CustResponse>().ForMember(/*Some Properties*/);
m.CreateMap<ADDROBJ,CustResponse>().ForMember(/*Some Properties*/);
现在,我想为我的GetCustomer
方法编写一个单元测试用例。我无法执行此操作,因为我的方法取决于Mapper.Map
。
无论如何,我可以将var response = AutoMapper.Mapper.Map<CustResponse>(repo.custObj).Map(repo.addrObj);
移至某个界面并使用该界面对象来调用操作。
通过这种方式,我将能够mock
自动映射器界面。
单元测试代码:
var repStub = new Mock<ICustomerRepository>();
var expected = new CustResponse();
var mockMapper = new Mock<Mapper.Map>(); //Not working
var customer = new CustomerService(repStub.Object);
customer.GetCustomer("data");
编辑:我不是在问是否应该进行自动映射器单元测试。我的问题是我当前的服务方法不允许我创建moq
的{{1}}对象。如何在实现中创建Mapper
接口?