unit-testing - IMapper 模拟返回 null

标签 unit-testing asp.net-core moq xunit

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

var users = _mapper.Map<IList<User>>(data);

这里是使用 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);

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

最佳答案

您还可以考虑使用专门为测试配置的实际 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

//...

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

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

关于unit-testing - IMapper 模拟返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53190867/

相关文章:

cordova - cordova自定义插件的测试覆盖率工具

javascript - AngularJS Controller 中的单元测试 promise

Angular 2 测试用例显示没有 NgControl 的提供者

asp.net-core - 为什么 ASP.NET Core 不强制 Startup 类型实现接口(interface)

c# - Moq - 检查方法是否被模拟(设置)

node.js - 如何模拟 route 使用的 knex 函数

c# - 具有修改值的 TryUpdateModelAsync

c# - 创建新标准 .NET 项目时的依赖项警告

c# - 单元测试 unityContainer.Resolve

c# - 如何最小化一个只读属性,其值取决于类方法调用?