gpt4 book ai didi

c# - 如何使用 IMappingAction 使用 AfterMap 对 AutoMapper 配置文件进行单元测试

转载 作者:行者123 更新时间:2023-12-05 03:45:13 27 4
gpt4 key购买 nike

我如何对使用 AfterMap 和具有注入(inject)服务的 IMappingAction 的配置文件进行单元测试。

MappingProfile.cs

public MappingProfile()
{
CreateMap<string, string>()
.ConvertUsing<Core.Converter.TrimStringValueConverter>();
CreateMap<TestModel, TestEntity>(
.AfterMap<AfterMapAction>();
}

AfterMapAction.cs

public class AfterMapAction: IMappingAction<TestModel, TestEntity>
{
private readonly IAfterMapService _afterMapService ;
public AfterMapAction(IAfterMapService aftermapService)
{
_afterMapService = afterMapService ?? throw new ArgumentNullException(nameof(afterMapService));
}

public void Process(TestModel, TestEntity destination, ResolutionContext context)
{
var somevalue = _afterMapService.DoAction(source);
...
}
}

测试.cs

[TestMethod]
public void AutoMapperTest()
{
// Arrange
var model = new TestModel { Id = "4711" , Name = "Test" };
var mapper = new Mapper(new MapperConfiguration(cfg =>
{
cfg.AddProfile<MappingProfile>();
}));

// Act
var mappedObject = mapper.Map<Entity>(model);

...
}

当我运行这个测试时,我得到以下异常:

System.MissingMethodException: '没有为 'AfterMapAction' 类型定义无参数构造函数。

cfg.ConstructServicesUsing 的用法无效。它总是以 InvalidCastException 结束。

如何安排单元测试,以便 AutoMapper 可以实例化 AfterMapAction

最佳答案

我可以通过在单元测试中使用 IServiceCollection 来解决这个问题。

// Arrange
var services = new ServiceCollection();
services.AddSingleton<AfterMapAction>();
services.AddSingleton<IAfterMapService, AfterMapService>();
services.AddAutoMapper(cfg => cfg.AddProfile<MappingProfile>());

var serviceProvider = services.BuildServiceProvider();
var mapper = serviceProvider.GetService<IMapper>();

// Act

关于c# - 如何使用 IMappingAction 使用 AfterMap 对 AutoMapper 配置文件进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65957046/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com