具有多个源的Mock Automapper映射



我正在为一个方法编写一个xunit测试,该方法有一个带有几个源的映射器。但我无法嘲笑自动装配者。

映射器:

CreateMap<(Foo foo, Boo boo), Dto>()
.ForMember(d => d.Name, o => o.MapFrom(s => s.foo.Name))
.ForMember(d => d.Age, o => o.MapFrom(s => s.boo.Age));
单元测试:

[Fact]
public void Handle_Test1()
{
//Arrange
var mocker = new AutoMocker(); 
var sut = mocker.CreateInstance<Handler>();
var mapperMock = mocker.GetMock<IMapper>();
var foo = new Foo { Name = "Test" };
var boo = new Boo { Age = 25 };
var dto = new Dto { Name = "Test", Age = 25 };

mapperMock.Setup(x => x.Map<Dto(new Tuple<Foo, Boo> (foo, boo ))).Returns(dto);
//Also tried
//mapperMock.Setup(x => x.Map<Dto(new { foo, boo })).Returns(dto);
}

我能够让它工作使用下面的行。但我正试图用上述方法解决问题。有人能指出我哪里做错了吗?

mapperMock.Setup(x => x.Map<Dto>(It.IsAny<object>())).Returns(dto)

首先,你应该而不是模拟AutoMapper。

我将创建一个加载器并在AutoMocker中注册真正的映射。

public IMapper LoadMapper() {
var mapper = new MapperConfiguration(cfg =>
{                
cfg.AddProfile<Profile1>();
cfg.AddProfile<Profile2>();
});
return mapper.CreateMapper();
}

如果你模拟一个映射器,你的测试可能会被破坏,但是映射器可以掩盖这个问题。

他们使用它:

var mocker = new AutoMocker();
mocker.Use(LoadMapper());

相关内容

  • 没有找到相关文章

最新更新