IMapper 模拟返回 null

Ask*_*Ask 2 unit-testing moq xunit asp.net-core

我在 .net core 中有一个应用程序,我在其中一项服务中使用 automapper。现在的问题是我正在编写测试方法并模拟自动映射器,但它返回 null。以下是服务方法:

var users = _mapper.Map<IList<User>>(data);
Run Code Online (Sandbox Code Playgroud)

这是使用 Moq 进行的模拟:

var userLogsList = new List<User>() { new User() {Id = "1234", Name= "Dummy User"}};
var mapperMock = new Mock<IMapper>();
mapperMock.Setup(m => m.Map<List<UserEntity>, IList<User>>(It.IsAny<List<UserEntity>>()))
.Returns(userLogsList);
Run Code Online (Sandbox Code Playgroud)

现在这个模拟每次都返回 null。我究竟做错了什么?

Nko*_*osi 8

您还可以考虑使用IMapper专门为测试配置的实际实例。

// Arrange

//Configure mapping just for this test
var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<User, UserEntity>();
    cfg.CreateMap<UserEntity, User>();
});

var mapper = config.CreateMapper(); // IMapper to be injected into subject under test

//...
Run Code Online (Sandbox Code Playgroud)

如果可以在没有太大影响和最少配置的情况下使用依赖项,那么并不总是有理由必须使用模拟。

在这种情况下,配置比创建模拟要简单得多,并且您无需额外工作即可获得依赖项的完整功能。