首页 > 解决方案 > 使用最小起订量对自动映射器进行单元测试

问题描述

我有一个从存储库获取数据并使用自动映射器将其映射到 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创建Mapper. 如何IMapper使用我的实现创建接口?

标签: c#unit-testingautomappermoq

解决方案


推荐阅读