gpt4 book ai didi

unit-testing - 如何使用 StructureMap 依赖注入(inject)在 Web API 测试中模拟 AutoMapper IMapper 对象?

转载 作者:行者123 更新时间:2023-12-04 10:36:01 28 4
gpt4 key购买 nike

所以我从头开始构建了一个 WebAPI,包括我在网上找到的一些最佳实践,例如依赖注入(inject)和使用自动映射器的域<->DTO 映射等。

我的 API Controller 现在看起来与此类似

public MyController(IMapper mapper)
{
}

和 AutoMapper 注册表:
public AutoMapperRegistry()
{
var profiles = from t in typeof(AutoMapperRegistry).Assembly.GetTypes()
where typeof(Profile).IsAssignableFrom(t)
select (Profile)Activator.CreateInstance(t);

var config = new MapperConfiguration(cfg =>
{
foreach (var profile in profiles)
{
cfg.AddProfile(profile);
}
});

For<MapperConfiguration>().Use(config);
For<IMapper>().Use(ctx => ctx.GetInstance<MapperConfiguration>().CreateMapper(ctx.GetInstance));
}

我还在构建一些测试用例,实现最小起订量,这就是我感到有点不确定的地方。每当调用我的 Controller 时,我都需要像这样传递一个 IMapper:
var mockMapper = new Mock<IMapper>();
var controller = new MyController(mockMapper.Object);

但是,我如何配置 IMapper 以获得正确的映射?重新创建我之前已经创建的相同逻辑来配置 Mapper 感觉是多余的。所以我想知道推荐的方法是什么?

最佳答案

这可能是我的另一个解决方案

        //auto mapper configuration
var mockMapper = new MapperConfiguration(cfg =>
{
cfg.AddProfile(new AutoMapperProfile()); //your automapperprofile
});
var mapper = mockMapper.CreateMapper();

然后像这样调用 Controller
var controller = new YourController(imapper:mapper,..otherobjects..);

这样它将达到目的,否则如果您为 IMapper 创建模拟对象,那么它将返回您要求它返回的内容。

关于unit-testing - 如何使用 StructureMap 依赖注入(inject)在 Web API 测试中模拟 AutoMapper IMapper 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36074324/

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