使用Moq进行单元测试自动映射器

时间:2018-10-25 22:05:09

标签: c# unit-testing automapper moq

我有一个服务方法,可以从存储库中获取数据,并使用自动映射器将其映射到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接口?

0 个答案:

没有答案