gpt4 book ai didi

ninject - 在集成测试中使用 IMapper

转载 作者:行者123 更新时间:2023-12-01 10:29:16 25 4
gpt4 key购买 nike

正如标题所说,我正在编写集成测试,并且希望在这些测试中测试和初始化 IMapper 对象。

我使用 XUnit 作为测试框架,使用 Ninject 来处理依赖注入(inject)。

我习惯于使用静态 AutoMapper 方法,现在正在转向使用 IMapper 接口(interface),这是我的一个存储库构造函数中的一个参数。

我有一个继承 NinjectModule 基类的 DependencyRegistrar 类。

我的加载方法如下:

public override void Load()
{
var automapperConfig = new MapperConfiguration(cfg => { cfg.AddProfile<AutoMapperProfile>(); });
automapperConfig.AssertConfigurationIsValid();
var mapper = automapperConfig.CreateMapper();

Bind<IMapper>().ToConstant(mapper).InSingletonScope();
Bind<IUserManager>().To<UserManager>().InTransientScope();
Bind<IUserRepository>().To<UserRepository>().InTransientScope();
}

此模块由 API 项目中的 NinjectWebCommon 类加载,但显然在集成测试期间不会加载。

ConfigurationSettingsEntity configurationSettings = new ConfigurationSettingsEntity(ConfigurationManager.AppSettings);
var modules = new INinjectModule[] { new DependencyResolution.DependencyRegistrar(configurationSettings) };
var kernel = new StandardKernel(modules);

所以,我的问题是,加载真正的映射器实现的最佳方式是什么,这样我就可以在构建集成测试时将该映射器传递到存储库的构造函数中?

UserRepository tester = new UserRepository(mapper);

最佳答案

放弃使用静态 Mapper 绝对值得付出努力 - future 测试会容易得多!

在我的单元测试中,我使用如下代码:

var config = new MapperConfiguration(cfg => { 
cfg.AddProfile<MyProfile>();
});
IMapper mapper = config.CreateMapper();

在每个测试套件中,我手动指定这些测试所需的配置文件。

关于ninject - 在集成测试中使用 IMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44402805/

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