У меня есть сервисный метод, который получает данные из репозитория, и с помощью автоматического преобразователя я сопоставляю его с 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);
}
Конфигурация Automapper:
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
интерфейс с моей реализацией?